{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# NLP_assignment01_01_课堂内容复现"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Build Graph\n",
    "- 找出城市的名字和locatoin"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "coordination_source = \"\"\"\n",
    "{name:'兰州', geoCoord:[103.73, 36.03]},\n",
    "{name:'嘉峪关', geoCoord:[98.17, 39.47]},\n",
    "{name:'西宁', geoCoord:[101.74, 36.56]},\n",
    "{name:'成都', geoCoord:[104.06, 30.67]},\n",
    "{name:'石家庄', geoCoord:[114.48, 38.03]},\n",
    "{name:'拉萨', geoCoord:[102.73, 25.04]},\n",
    "{name:'贵阳', geoCoord:[106.71, 26.57]},\n",
    "{name:'武汉', geoCoord:[114.31, 30.52]},\n",
    "{name:'郑州', geoCoord:[113.65, 34.76]},\n",
    "{name:'济南', geoCoord:[117, 36.65]},\n",
    "{name:'南京', geoCoord:[118.78, 32.04]},\n",
    "{name:'合肥', geoCoord:[117.27, 31.86]},\n",
    "{name:'杭州', geoCoord:[120.19, 30.26]},\n",
    "{name:'南昌', geoCoord:[115.89, 28.68]},\n",
    "{name:'福州', geoCoord:[119.3, 26.08]},\n",
    "{name:'广州', geoCoord:[113.23, 23.16]},\n",
    "{name:'长沙', geoCoord:[113, 28.21]},\n",
    "//{name:'海口', geoCoord:[110.35, 20.02]},\n",
    "{name:'沈阳', geoCoord:[123.38, 41.8]},\n",
    "{name:'长春', geoCoord:[125.35, 43.88]},\n",
    "{name:'哈尔滨', geoCoord:[126.63, 45.75]},\n",
    "{name:'太原', geoCoord:[112.53, 37.87]},\n",
    "{name:'西安', geoCoord:[108.95, 34.27]},\n",
    "//{name:'台湾', geoCoord:[121.30, 25.03]},\n",
    "{name:'北京', geoCoord:[116.46, 39.92]},\n",
    "{name:'上海', geoCoord:[121.48, 31.22]},\n",
    "{name:'重庆', geoCoord:[106.54, 29.59]},\n",
    "{name:'天津', geoCoord:[117.2, 39.13]},\n",
    "{name:'呼和浩特', geoCoord:[111.65, 40.82]},\n",
    "{name:'南宁', geoCoord:[108.33, 22.84]},\n",
    "//{name:'西藏', geoCoord:[91.11, 29.97]},\n",
    "{name:'银川', geoCoord:[106.27, 38.47]},\n",
    "{name:'乌鲁木齐', geoCoord:[87.68, 43.77]},\n",
    "{name:'香港', geoCoord:[114.17, 22.28]},\n",
    "{name:'澳门', geoCoord:[113.54, 22.19]}\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Get data from source using regular expression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## regular expression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[a-z]\n",
    "[A-Z]\n",
    "[^a]: negation\n",
    "colou?r:  ? zero or one of its previous character\n",
    "```\n",
    "* : zero or more of its previous character\n",
    "+: one or more\n",
    ".:match any single character\n",
    "^:start of the line\n",
    "$:end of the line\n",
    "| [cat|dog] : cat or dog\n",
    "(da): make the string da like a character\n",
    "```\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "l = \"color or colour， coloucer\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['color', 'colour']"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pattern = re.compile(\"colou?r\")\n",
    "pattern.findall(l)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "coordination_source = \"\"\"\n",
    "{name:'兰州', geoCoord:[103.73, 36.03]},\n",
    "{name:'嘉峪关', geoCoord:[98.17, 39.47]},\n",
    "{name:'西宁', geoCoord:[101.74, 36.56]},\n",
    "{name:'成都', geoCoord:[104.06, 30.67]},\n",
    "{name:'石家庄', geoCoord:[114.48, 38.03]},\n",
    "{name:'拉萨', geoCoord:[102.73, 25.04]},\n",
    "{name:'贵阳', geoCoord:[106.71, 26.57]},\n",
    "{name:'武汉', geoCoord:[114.31, 30.52]},\n",
    "{name:'郑州', geoCoord:[113.65, 34.76]},\n",
    "{name:'济南', geoCoord:[117, 36.65]},\n",
    "{name:'南京', geoCoord:[118.78, 32.04]},\n",
    "{name:'合肥', geoCoord:[117.27, 31.86]},\n",
    "{name:'杭州', geoCoord:[120.19, 30.26]},\n",
    "{name:'南昌', geoCoord:[115.89, 28.68]},\n",
    "{name:'福州', geoCoord:[119.3, 26.08]},\n",
    "{name:'广州', geoCoord:[113.23, 23.16]},\n",
    "{name:'长沙', geoCoord:[113, 28.21]},\n",
    "//{name:'海口', geoCoord:[110.35, 20.02]},\n",
    "{name:'沈阳', geoCoord:[123.38, 41.8]},\n",
    "{name:'长春', geoCoord:[125.35, 43.88]},\n",
    "{name:'哈尔滨', geoCoord:[126.63, 45.75]},\n",
    "{name:'太原', geoCoord:[112.53, 37.87]},\n",
    "{name:'西安', geoCoord:[108.95, 34.27]},\n",
    "//{name:'台湾', geoCoord:[121.30, 25.03]},\n",
    "{name:'北京', geoCoord:[116.46, 39.92]},\n",
    "{name:'上海', geoCoord:[121.48, 31.22]},\n",
    "{name:'重庆', geoCoord:[106.54, 29.59]},\n",
    "{name:'天津', geoCoord:[117.2, 39.13]},\n",
    "{name:'呼和浩特', geoCoord:[111.65, 40.82]},\n",
    "{name:'南宁', geoCoord:[108.33, 22.84]},\n",
    "//{name:'西藏', geoCoord:[91.11, 29.97]},\n",
    "{name:'银川', geoCoord:[106.27, 38.47]},\n",
    "{name:'乌鲁木齐', geoCoord:[87.68, 43.77]},\n",
    "{name:'香港', geoCoord:[114.17, 22.28]},\n",
    "{name:'澳门', geoCoord:[113.54, 22.19]}\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "# name:'澳门', geoCoord:[113.54, 22.19]}\n",
    "def get_city_info(city_coordination):\n",
    "    city_location = {} # 存放城市和相应的经纬度\n",
    "    for line in city_coordination.split('\\n'):\n",
    "        # 需要忽略的一些部分\n",
    "        if line.startswith(\"//\"):\n",
    "            continue\n",
    "        if line.strip() == \"\":\n",
    "            continue\n",
    "        city = re.findall(\"name:'(\\w+)'\",line)[0]\n",
    "        x_y = re.findall(\"Coord:\\[(\\d+.\\d+),\\s(\\d+.\\d+)\\]\",line)[0]\n",
    "        x_y = tuple(map(float,x_y))\n",
    "        city_location[city] = x_y\n",
    "    return city_location            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "city_info = get_city_info(coordination_source)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'兰州': (103.73, 36.03),\n",
       " '嘉峪关': (98.17, 39.47),\n",
       " '西宁': (101.74, 36.56),\n",
       " '成都': (104.06, 30.67),\n",
       " '石家庄': (114.48, 38.03),\n",
       " '拉萨': (102.73, 25.04),\n",
       " '贵阳': (106.71, 26.57),\n",
       " '武汉': (114.31, 30.52),\n",
       " '郑州': (113.65, 34.76),\n",
       " '济南': (117.0, 36.65),\n",
       " '南京': (118.78, 32.04),\n",
       " '合肥': (117.27, 31.86),\n",
       " '杭州': (120.19, 30.26),\n",
       " '南昌': (115.89, 28.68),\n",
       " '福州': (119.3, 26.08),\n",
       " '广州': (113.23, 23.16),\n",
       " '长沙': (113.0, 28.21),\n",
       " '沈阳': (123.38, 41.8),\n",
       " '长春': (125.35, 43.88),\n",
       " '哈尔滨': (126.63, 45.75),\n",
       " '太原': (112.53, 37.87),\n",
       " '西安': (108.95, 34.27),\n",
       " '北京': (116.46, 39.92),\n",
       " '上海': (121.48, 31.22),\n",
       " '重庆': (106.54, 29.59),\n",
       " '天津': (117.2, 39.13),\n",
       " '呼和浩特': (111.65, 40.82),\n",
       " '南宁': (108.33, 22.84),\n",
       " '银川': (106.27, 38.47),\n",
       " '乌鲁木齐': (87.68, 43.77),\n",
       " '香港': (114.17, 22.28),\n",
       " '澳门': (113.54, 22.19)}"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "city_info"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compute distance between cities\n",
    "- 网上查找的，因为地球是圆的，有专门的计算公式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "def geo_distance(origin, destination):\n",
    "    \"\"\"\n",
    "    Calculate the Haversine distance.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "    origin : tuple of float\n",
    "        (lat, long)\n",
    "    destination : tuple of float\n",
    "        (lat, long)\n",
    "\n",
    "    Returns\n",
    "    -------\n",
    "    distance_in_km : float\n",
    "\n",
    "    Examples\n",
    "    --------\n",
    "    >>> origin = (48.1372, 11.5756)  # Munich\n",
    "    >>> destination = (52.5186, 13.4083)  # Berlin\n",
    "    >>> round(distance(origin, destination), 1)\n",
    "    504.2\n",
    "    \"\"\"\n",
    "    lat1, lon1 = origin\n",
    "    lat2, lon2 = destination\n",
    "    radius = 6371  # km\n",
    "\n",
    "    dlat = math.radians(lat2 - lat1)\n",
    "    dlon = math.radians(lon2 - lon1)\n",
    "    a = (math.sin(dlat / 2) * math.sin(dlat / 2) +\n",
    "         math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) *\n",
    "         math.sin(dlon / 2) * math.sin(dlon / 2))\n",
    "    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))\n",
    "    d = radius * c\n",
    "    return d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "153.5185697155768"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def get_city_distance(city1,city2):\n",
    "    return geo_distance(city_info[city1],city_info[city2])\n",
    "get_city_distance(\"杭州\",\"上海\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Draw the graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'F' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-35-0511f9023d86>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrcParams\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'font.sans-serif'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'SimHei'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrcParams\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mF\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'F' is not defined"
     ]
    }
   ],
   "source": [
    "import networkx as nx # networkx:用于结点画图\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.rcParams[F] = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['兰州', '嘉峪关', '西宁', '成都', '石家庄', '拉萨', '贵阳', '武汉', '郑州', '济南', '南京', '合肥', '杭州', '南昌', '福州', '广州', '长沙', '沈阳', '长春', '哈尔滨', '太原', '西安', '北京', '上海', '重庆', '天津', '呼和浩特', '南宁', '银川', '乌鲁木齐', '香港', '澳门'])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "city_info.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "city_graph = nx.Graph()\n",
    "# 添加城市结点\n",
    "city_graph.add_nodes_from(list(city_info.keys()))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/stone/anaconda3/lib/python3.7/site-packages/matplotlib/font_manager.py:1241: UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans.\n",
      "  (prop.get_family(), self.defaultFamily[fontext]))\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "nx.draw(city_graph, city_info, with_labels=True, node_size=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 疑问： 为什么城市名称没有显示出来"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Build connection between. Let's assume that two cities are connected if their distance is less than 700 km."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "threshold = 700   # defined the threshold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "from collections import defaultdict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 小于阈值，建立相互之间的连接🔗\n",
    "def build_connection(city_info):\n",
    "    cities_connection = defaultdict(list)\n",
    "    cities = list(city_info.keys())\n",
    "    print(cities)\n",
    "    for c1 in cities:\n",
    "        for c2 in cities:\n",
    "            if c1 == c2: continue\n",
    "            if get_city_distance(c1, c2) < threshold:\n",
    "                cities_connection[c1].append(c2)\n",
    "    return cities_connection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['兰州', '嘉峪关', '西宁', '成都', '石家庄', '拉萨', '贵阳', '武汉', '郑州', '济南', '南京', '合肥', '杭州', '南昌', '福州', '广州', '长沙', '沈阳', '长春', '哈尔滨', '太原', '西安', '北京', '上海', '重庆', '天津', '呼和浩特', '南宁', '银川', '乌鲁木齐', '香港', '澳门']\n"
     ]
    }
   ],
   "source": [
    "cities_connection = build_connection(city_info)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(defaultdict(list,\n",
       "             {'兰州': ['嘉峪关', '西宁', '成都', '拉萨', '贵阳', '西安', '重庆', '南宁', '银川'],\n",
       "              '嘉峪关': ['兰州', '西宁', '成都', '拉萨'],\n",
       "              '西宁': ['兰州', '嘉峪关', '成都', '拉萨', '贵阳', '重庆', '银川'],\n",
       "              '成都': ['兰州', '嘉峪关', '西宁', '拉萨', '贵阳', '西安', '重庆', '南宁', '银川'],\n",
       "              '石家庄': ['武汉',\n",
       "               '郑州',\n",
       "               '济南',\n",
       "               '南京',\n",
       "               '合肥',\n",
       "               '南昌',\n",
       "               '广州',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '西安',\n",
       "               '北京',\n",
       "               '天津',\n",
       "               '呼和浩特'],\n",
       "              '拉萨': ['兰州', '嘉峪关', '西宁', '成都', '贵阳', '重庆', '南宁', '银川'],\n",
       "              '贵阳': ['兰州', '西宁', '成都', '拉萨', '西安', '重庆', '南宁', '银川'],\n",
       "              '武汉': ['石家庄',\n",
       "               '郑州',\n",
       "               '济南',\n",
       "               '南京',\n",
       "               '合肥',\n",
       "               '杭州',\n",
       "               '南昌',\n",
       "               '福州',\n",
       "               '广州',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '西安',\n",
       "               '北京',\n",
       "               '天津',\n",
       "               '呼和浩特',\n",
       "               '香港',\n",
       "               '澳门'],\n",
       "              '郑州': ['石家庄',\n",
       "               '武汉',\n",
       "               '济南',\n",
       "               '南京',\n",
       "               '合肥',\n",
       "               '南昌',\n",
       "               '广州',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '西安',\n",
       "               '北京',\n",
       "               '天津',\n",
       "               '呼和浩特',\n",
       "               '香港',\n",
       "               '澳门'],\n",
       "              '济南': ['石家庄',\n",
       "               '武汉',\n",
       "               '郑州',\n",
       "               '南京',\n",
       "               '合肥',\n",
       "               '杭州',\n",
       "               '南昌',\n",
       "               '福州',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '北京',\n",
       "               '上海',\n",
       "               '天津',\n",
       "               '呼和浩特'],\n",
       "              '南京': ['石家庄',\n",
       "               '武汉',\n",
       "               '郑州',\n",
       "               '济南',\n",
       "               '合肥',\n",
       "               '杭州',\n",
       "               '南昌',\n",
       "               '福州',\n",
       "               '长沙',\n",
       "               '北京',\n",
       "               '上海',\n",
       "               '天津'],\n",
       "              '合肥': ['石家庄',\n",
       "               '武汉',\n",
       "               '郑州',\n",
       "               '济南',\n",
       "               '南京',\n",
       "               '杭州',\n",
       "               '南昌',\n",
       "               '福州',\n",
       "               '广州',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '北京',\n",
       "               '上海',\n",
       "               '天津',\n",
       "               '香港',\n",
       "               '澳门'],\n",
       "              '杭州': ['武汉', '济南', '南京', '合肥', '南昌', '福州', '北京', '上海', '天津'],\n",
       "              '南昌': ['石家庄',\n",
       "               '武汉',\n",
       "               '郑州',\n",
       "               '济南',\n",
       "               '南京',\n",
       "               '合肥',\n",
       "               '杭州',\n",
       "               '福州',\n",
       "               '广州',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '北京',\n",
       "               '上海',\n",
       "               '天津',\n",
       "               '香港',\n",
       "               '澳门'],\n",
       "              '福州': ['武汉',\n",
       "               '济南',\n",
       "               '南京',\n",
       "               '合肥',\n",
       "               '杭州',\n",
       "               '南昌',\n",
       "               '广州',\n",
       "               '上海',\n",
       "               '香港',\n",
       "               '澳门'],\n",
       "              '广州': ['石家庄',\n",
       "               '武汉',\n",
       "               '郑州',\n",
       "               '合肥',\n",
       "               '南昌',\n",
       "               '福州',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '西安',\n",
       "               '南宁',\n",
       "               '香港',\n",
       "               '澳门'],\n",
       "              '长沙': ['石家庄',\n",
       "               '武汉',\n",
       "               '郑州',\n",
       "               '济南',\n",
       "               '南京',\n",
       "               '合肥',\n",
       "               '南昌',\n",
       "               '广州',\n",
       "               '太原',\n",
       "               '西安',\n",
       "               '北京',\n",
       "               '天津',\n",
       "               '呼和浩特',\n",
       "               '南宁',\n",
       "               '香港',\n",
       "               '澳门'],\n",
       "              '沈阳': ['长春', '哈尔滨', '上海'],\n",
       "              '长春': ['沈阳', '哈尔滨'],\n",
       "              '哈尔滨': ['沈阳', '长春'],\n",
       "              '太原': ['石家庄',\n",
       "               '武汉',\n",
       "               '郑州',\n",
       "               '济南',\n",
       "               '合肥',\n",
       "               '南昌',\n",
       "               '广州',\n",
       "               '长沙',\n",
       "               '西安',\n",
       "               '北京',\n",
       "               '天津',\n",
       "               '呼和浩特',\n",
       "               '银川',\n",
       "               '澳门'],\n",
       "              '西安': ['兰州',\n",
       "               '成都',\n",
       "               '石家庄',\n",
       "               '贵阳',\n",
       "               '武汉',\n",
       "               '郑州',\n",
       "               '广州',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '重庆',\n",
       "               '呼和浩特',\n",
       "               '南宁',\n",
       "               '银川'],\n",
       "              '北京': ['石家庄',\n",
       "               '武汉',\n",
       "               '郑州',\n",
       "               '济南',\n",
       "               '南京',\n",
       "               '合肥',\n",
       "               '杭州',\n",
       "               '南昌',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '天津',\n",
       "               '呼和浩特'],\n",
       "              '上海': ['济南', '南京', '合肥', '杭州', '南昌', '福州', '沈阳', '天津'],\n",
       "              '重庆': ['兰州', '西宁', '成都', '拉萨', '贵阳', '西安', '呼和浩特', '南宁', '银川'],\n",
       "              '天津': ['石家庄',\n",
       "               '武汉',\n",
       "               '郑州',\n",
       "               '济南',\n",
       "               '南京',\n",
       "               '合肥',\n",
       "               '杭州',\n",
       "               '南昌',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '北京',\n",
       "               '上海',\n",
       "               '呼和浩特'],\n",
       "              '呼和浩特': ['石家庄',\n",
       "               '武汉',\n",
       "               '郑州',\n",
       "               '济南',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '西安',\n",
       "               '北京',\n",
       "               '重庆',\n",
       "               '天津',\n",
       "               '银川'],\n",
       "              '南宁': ['兰州',\n",
       "               '成都',\n",
       "               '拉萨',\n",
       "               '贵阳',\n",
       "               '广州',\n",
       "               '长沙',\n",
       "               '西安',\n",
       "               '重庆',\n",
       "               '银川',\n",
       "               '香港',\n",
       "               '澳门'],\n",
       "              '银川': ['兰州',\n",
       "               '西宁',\n",
       "               '成都',\n",
       "               '拉萨',\n",
       "               '贵阳',\n",
       "               '太原',\n",
       "               '西安',\n",
       "               '重庆',\n",
       "               '呼和浩特',\n",
       "               '南宁'],\n",
       "              '香港': ['武汉', '郑州', '合肥', '南昌', '福州', '广州', '长沙', '南宁', '澳门'],\n",
       "              '澳门': ['武汉',\n",
       "               '郑州',\n",
       "               '合肥',\n",
       "               '南昌',\n",
       "               '福州',\n",
       "               '广州',\n",
       "               '长沙',\n",
       "               '太原',\n",
       "               '南宁',\n",
       "               '香港']}),)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cities_connection,"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Draw connection graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "cities_connection_graph = nx.Graph(cities_connection)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/stone/anaconda3/lib/python3.7/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n",
      "  if cb.is_numlike(alpha):\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "nx.draw(cities_connection_graph,city_info,with_labels=True,node_size=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### BFS 1 version"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 输入：城市关系图，字典形式，开始城市，结束城市\n",
    "def search_1(graph,start,destination):\n",
    "    pathes = [[start]]  # list 用来存储待搜索路径\n",
    "    visited = set() # set用来存储已搜索的节点\n",
    "    \n",
    "    while pathes:\n",
    "        \"\"\"\n",
    "        path ['上海']\n",
    "        froniter 上海\n",
    "        path ['上海', '济南']\n",
    "        froniter 济南\n",
    "        path ['上海', '南京']\n",
    "        froniter 南京\n",
    "        path ['上海', '合肥']\n",
    "        froniter 合肥\n",
    "        \"\"\"\n",
    "        path = pathes.pop(0)  #提取第一条路径\n",
    "        print(\"path\", path)\n",
    "        froniter = path[-1]   #提取即将要探索的节点\n",
    "        print(\"froniter\", froniter)\n",
    "        if froniter in visited: continue  #检查如果该点已经探索过 则不用再探索\n",
    "        # {'兰州': ['嘉峪关', '西宁', '成都', '拉萨', '贵阳', '西安', '重庆', '南宁', '银川'],    \n",
    "        successsors = graph[froniter]\n",
    "        \n",
    "        for city in successsors:      #遍历子节点\n",
    "            if city in path: continue  # check loop #检查会不会形成环\n",
    "            \n",
    "            new_path = path+[city]\n",
    "            \n",
    "            pathes.append(new_path)  #bfs     #将新路径加到list里面，bfs放在前面，dfs则是相反\n",
    "            #pathes = [new_path] + pathes #dfs\n",
    "            \"\"\"\n",
    "            pathes [['上海', '济南'], ['上海', '南京'], ['上海', '合肥'], \n",
    "            ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州']]\n",
    "            \"\"\"\n",
    "            print(\"pathes\", pathes)\n",
    "            if city == destination:  #检查目的地是不是已经搜索到了\n",
    "                return new_path\n",
    "        visited.add(froniter)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "path ['上海']\n",
      "froniter 上海\n",
      "pathes [['上海', '济南']]\n",
      "pathes [['上海', '济南'], ['上海', '南京']]\n",
      "pathes [['上海', '济南'], ['上海', '南京'], ['上海', '合肥']]\n",
      "pathes [['上海', '济南'], ['上海', '南京'], ['上海', '合肥'], ['上海', '杭州']]\n",
      "pathes [['上海', '济南'], ['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌']]\n",
      "pathes [['上海', '济南'], ['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州']]\n",
      "pathes [['上海', '济南'], ['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳']]\n",
      "pathes [['上海', '济南'], ['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津']]\n",
      "path ['上海', '济南']\n",
      "froniter 济南\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津']]\n",
      "pathes [['上海', '南京'], ['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特']]\n",
      "path ['上海', '南京']\n",
      "froniter 南京\n",
      "pathes [['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄']]\n",
      "pathes [['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉']]\n",
      "pathes [['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州']]\n",
      "pathes [['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南']]\n",
      "pathes [['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥']]\n",
      "pathes [['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州']]\n",
      "pathes [['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌']]\n",
      "pathes [['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州']]\n",
      "pathes [['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙']]\n",
      "pathes [['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京']]\n",
      "pathes [['上海', '合肥'], ['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津']]\n",
      "path ['上海', '合肥']\n",
      "froniter 合肥\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州'], ['上海', '合肥', '济南']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州'], ['上海', '合肥', '济南'], ['上海', '合肥', '南京']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州'], ['上海', '合肥', '济南'], ['上海', '合肥', '南京'], ['上海', '合肥', '杭州']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州'], ['上海', '合肥', '济南'], ['上海', '合肥', '南京'], ['上海', '合肥', '杭州'], ['上海', '合肥', '南昌']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州'], ['上海', '合肥', '济南'], ['上海', '合肥', '南京'], ['上海', '合肥', '杭州'], ['上海', '合肥', '南昌'], ['上海', '合肥', '福州']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州'], ['上海', '合肥', '济南'], ['上海', '合肥', '南京'], ['上海', '合肥', '杭州'], ['上海', '合肥', '南昌'], ['上海', '合肥', '福州'], ['上海', '合肥', '广州']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州'], ['上海', '合肥', '济南'], ['上海', '合肥', '南京'], ['上海', '合肥', '杭州'], ['上海', '合肥', '南昌'], ['上海', '合肥', '福州'], ['上海', '合肥', '广州'], ['上海', '合肥', '长沙']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州'], ['上海', '合肥', '济南'], ['上海', '合肥', '南京'], ['上海', '合肥', '杭州'], ['上海', '合肥', '南昌'], ['上海', '合肥', '福州'], ['上海', '合肥', '广州'], ['上海', '合肥', '长沙'], ['上海', '合肥', '太原']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州'], ['上海', '合肥', '济南'], ['上海', '合肥', '南京'], ['上海', '合肥', '杭州'], ['上海', '合肥', '南昌'], ['上海', '合肥', '福州'], ['上海', '合肥', '广州'], ['上海', '合肥', '长沙'], ['上海', '合肥', '太原'], ['上海', '合肥', '北京']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州'], ['上海', '合肥', '济南'], ['上海', '合肥', '南京'], ['上海', '合肥', '杭州'], ['上海', '合肥', '南昌'], ['上海', '合肥', '福州'], ['上海', '合肥', '广州'], ['上海', '合肥', '长沙'], ['上海', '合肥', '太原'], ['上海', '合肥', '北京'], ['上海', '合肥', '天津']]\n",
      "pathes [['上海', '杭州'], ['上海', '南昌'], ['上海', '福州'], ['上海', '沈阳'], ['上海', '天津'], ['上海', '济南', '石家庄'], ['上海', '济南', '武汉'], ['上海', '济南', '郑州'], ['上海', '济南', '南京'], ['上海', '济南', '合肥'], ['上海', '济南', '杭州'], ['上海', '济南', '南昌'], ['上海', '济南', '福州'], ['上海', '济南', '长沙'], ['上海', '济南', '太原'], ['上海', '济南', '北京'], ['上海', '济南', '天津'], ['上海', '济南', '呼和浩特'], ['上海', '南京', '石家庄'], ['上海', '南京', '武汉'], ['上海', '南京', '郑州'], ['上海', '南京', '济南'], ['上海', '南京', '合肥'], ['上海', '南京', '杭州'], ['上海', '南京', '南昌'], ['上海', '南京', '福州'], ['上海', '南京', '长沙'], ['上海', '南京', '北京'], ['上海', '南京', '天津'], ['上海', '合肥', '石家庄'], ['上海', '合肥', '武汉'], ['上海', '合肥', '郑州'], ['上海', '合肥', '济南'], ['上海', '合肥', '南京'], ['上海', '合肥', '杭州'], ['上海', '合肥', '南昌'], ['上海', '合肥', '福州'], ['上海', '合肥', '广州'], ['上海', '合肥', '长沙'], ['上海', '合肥', '太原'], ['上海', '合肥', '北京'], ['上海', '合肥', '天津'], ['上海', '合肥', '香港']]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "['上海', '合肥', '香港']"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "search_1(cities_connection,\"上海\",\"香港\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Optimal search using variation of BFS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "def search_2(graph,start,destination,search_strategy):\n",
    "    pathes = [[start]]\n",
    "    visited = set()# ！\n",
    "    while pathes:\n",
    "        path = pathes.pop(0)\n",
    "        froniter = path[-1]\n",
    "        if froniter in visited : continue#             \n",
    "        if froniter == destination:# 放在前面检查，否则可能出现漏选现象\n",
    "            return path# ！\n",
    "        \n",
    "        successsors = graph[froniter]\n",
    "        \n",
    "        for city in successsors:\n",
    "            if city in path: continue  # check loop\n",
    "            \n",
    "            new_path = path+[city]\n",
    "            \n",
    "            pathes.append(new_path)  #bfs\n",
    "            \n",
    "        pathes = search_strategy(pathes)\n",
    "        print(\"pathes\", pathes)\n",
    "        visited.add(froniter) # ！\n",
    "       # if pathes and (destination == pathes[0][-1]):\n",
    "       #     return pathes[0]  \n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 对城市之间距离进行排序，获取最短路径城市，从小到大排序\n",
    "def sort_by_distance(pathes):\n",
    "    def get_distance_of_path(path):\n",
    "        distance = 0\n",
    "        for i,_ in enumerate(path[:-1]):\n",
    "            distance += get_city_distance(path[i],path[i+1])\n",
    "        print(\"distance\", distance)\n",
    "        return distance\n",
    "    return sorted(pathes,key=get_distance_of_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 直接获取两个城市之间的距离\n",
    "def get_distance_of_path(path):\n",
    "    distance = 0\n",
    "    for i,_ in enumerate(path[:-1]):\n",
    "        distance += get_city_distance(path[i],path[i+1])\n",
    "    return distance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "752.66259009181"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_distance_of_path([\"北京\",\"济南\",\"上海\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "732.5085345714293"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_distance_of_path([\"北京\",\"天津\",\"上海\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* lambda x:x 相当于就是DFS，没有使用路径距离优化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pathes [['北京', '石家庄'], ['北京', '武汉'], ['北京', '郑州'], ['北京', '济南'], ['北京', '南京'], ['北京', '合肥'], ['北京', '杭州'], ['北京', '南昌'], ['北京', '长沙'], ['北京', '太原'], ['北京', '天津'], ['北京', '呼和浩特']]\n",
      "pathes [['北京', '武汉'], ['北京', '郑州'], ['北京', '济南'], ['北京', '南京'], ['北京', '合肥'], ['北京', '杭州'], ['北京', '南昌'], ['北京', '长沙'], ['北京', '太原'], ['北京', '天津'], ['北京', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特']]\n",
      "pathes [['北京', '郑州'], ['北京', '济南'], ['北京', '南京'], ['北京', '合肥'], ['北京', '杭州'], ['北京', '南昌'], ['北京', '长沙'], ['北京', '太原'], ['北京', '天津'], ['北京', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门']]\n",
      "pathes [['北京', '济南'], ['北京', '南京'], ['北京', '合肥'], ['北京', '杭州'], ['北京', '南昌'], ['北京', '长沙'], ['北京', '太原'], ['北京', '天津'], ['北京', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门']]\n",
      "pathes [['北京', '南京'], ['北京', '合肥'], ['北京', '杭州'], ['北京', '南昌'], ['北京', '长沙'], ['北京', '太原'], ['北京', '天津'], ['北京', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特']]\n",
      "pathes [['北京', '合肥'], ['北京', '杭州'], ['北京', '南昌'], ['北京', '长沙'], ['北京', '太原'], ['北京', '天津'], ['北京', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津']]\n",
      "pathes [['北京', '杭州'], ['北京', '南昌'], ['北京', '长沙'], ['北京', '太原'], ['北京', '天津'], ['北京', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门']]\n",
      "pathes [['北京', '南昌'], ['北京', '长沙'], ['北京', '太原'], ['北京', '天津'], ['北京', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门'], ['北京', '杭州', '武汉'], ['北京', '杭州', '济南'], ['北京', '杭州', '南京'], ['北京', '杭州', '合肥'], ['北京', '杭州', '南昌'], ['北京', '杭州', '福州'], ['北京', '杭州', '上海'], ['北京', '杭州', '天津']]\n",
      "pathes [['北京', '长沙'], ['北京', '太原'], ['北京', '天津'], ['北京', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门'], ['北京', '杭州', '武汉'], ['北京', '杭州', '济南'], ['北京', '杭州', '南京'], ['北京', '杭州', '合肥'], ['北京', '杭州', '南昌'], ['北京', '杭州', '福州'], ['北京', '杭州', '上海'], ['北京', '杭州', '天津'], ['北京', '南昌', '石家庄'], ['北京', '南昌', '武汉'], ['北京', '南昌', '郑州'], ['北京', '南昌', '济南'], ['北京', '南昌', '南京'], ['北京', '南昌', '合肥'], ['北京', '南昌', '杭州'], ['北京', '南昌', '福州'], ['北京', '南昌', '广州'], ['北京', '南昌', '长沙'], ['北京', '南昌', '太原'], ['北京', '南昌', '上海'], ['北京', '南昌', '天津'], ['北京', '南昌', '香港'], ['北京', '南昌', '澳门']]\n",
      "pathes [['北京', '太原'], ['北京', '天津'], ['北京', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门'], ['北京', '杭州', '武汉'], ['北京', '杭州', '济南'], ['北京', '杭州', '南京'], ['北京', '杭州', '合肥'], ['北京', '杭州', '南昌'], ['北京', '杭州', '福州'], ['北京', '杭州', '上海'], ['北京', '杭州', '天津'], ['北京', '南昌', '石家庄'], ['北京', '南昌', '武汉'], ['北京', '南昌', '郑州'], ['北京', '南昌', '济南'], ['北京', '南昌', '南京'], ['北京', '南昌', '合肥'], ['北京', '南昌', '杭州'], ['北京', '南昌', '福州'], ['北京', '南昌', '广州'], ['北京', '南昌', '长沙'], ['北京', '南昌', '太原'], ['北京', '南昌', '上海'], ['北京', '南昌', '天津'], ['北京', '南昌', '香港'], ['北京', '南昌', '澳门'], ['北京', '长沙', '石家庄'], ['北京', '长沙', '武汉'], ['北京', '长沙', '郑州'], ['北京', '长沙', '济南'], ['北京', '长沙', '南京'], ['北京', '长沙', '合肥'], ['北京', '长沙', '南昌'], ['北京', '长沙', '广州'], ['北京', '长沙', '太原'], ['北京', '长沙', '西安'], ['北京', '长沙', '天津'], ['北京', '长沙', '呼和浩特'], ['北京', '长沙', '南宁'], ['北京', '长沙', '香港'], ['北京', '长沙', '澳门']]\n",
      "pathes [['北京', '天津'], ['北京', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门'], ['北京', '杭州', '武汉'], ['北京', '杭州', '济南'], ['北京', '杭州', '南京'], ['北京', '杭州', '合肥'], ['北京', '杭州', '南昌'], ['北京', '杭州', '福州'], ['北京', '杭州', '上海'], ['北京', '杭州', '天津'], ['北京', '南昌', '石家庄'], ['北京', '南昌', '武汉'], ['北京', '南昌', '郑州'], ['北京', '南昌', '济南'], ['北京', '南昌', '南京'], ['北京', '南昌', '合肥'], ['北京', '南昌', '杭州'], ['北京', '南昌', '福州'], ['北京', '南昌', '广州'], ['北京', '南昌', '长沙'], ['北京', '南昌', '太原'], ['北京', '南昌', '上海'], ['北京', '南昌', '天津'], ['北京', '南昌', '香港'], ['北京', '南昌', '澳门'], ['北京', '长沙', '石家庄'], ['北京', '长沙', '武汉'], ['北京', '长沙', '郑州'], ['北京', '长沙', '济南'], ['北京', '长沙', '南京'], ['北京', '长沙', '合肥'], ['北京', '长沙', '南昌'], ['北京', '长沙', '广州'], ['北京', '长沙', '太原'], ['北京', '长沙', '西安'], ['北京', '长沙', '天津'], ['北京', '长沙', '呼和浩特'], ['北京', '长沙', '南宁'], ['北京', '长沙', '香港'], ['北京', '长沙', '澳门'], ['北京', '太原', '石家庄'], ['北京', '太原', '武汉'], ['北京', '太原', '郑州'], ['北京', '太原', '济南'], ['北京', '太原', '合肥'], ['北京', '太原', '南昌'], ['北京', '太原', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '太原', '天津'], ['北京', '太原', '呼和浩特'], ['北京', '太原', '银川'], ['北京', '太原', '澳门']]\n",
      "pathes [['北京', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门'], ['北京', '杭州', '武汉'], ['北京', '杭州', '济南'], ['北京', '杭州', '南京'], ['北京', '杭州', '合肥'], ['北京', '杭州', '南昌'], ['北京', '杭州', '福州'], ['北京', '杭州', '上海'], ['北京', '杭州', '天津'], ['北京', '南昌', '石家庄'], ['北京', '南昌', '武汉'], ['北京', '南昌', '郑州'], ['北京', '南昌', '济南'], ['北京', '南昌', '南京'], ['北京', '南昌', '合肥'], ['北京', '南昌', '杭州'], ['北京', '南昌', '福州'], ['北京', '南昌', '广州'], ['北京', '南昌', '长沙'], ['北京', '南昌', '太原'], ['北京', '南昌', '上海'], ['北京', '南昌', '天津'], ['北京', '南昌', '香港'], ['北京', '南昌', '澳门'], ['北京', '长沙', '石家庄'], ['北京', '长沙', '武汉'], ['北京', '长沙', '郑州'], ['北京', '长沙', '济南'], ['北京', '长沙', '南京'], ['北京', '长沙', '合肥'], ['北京', '长沙', '南昌'], ['北京', '长沙', '广州'], ['北京', '长沙', '太原'], ['北京', '长沙', '西安'], ['北京', '长沙', '天津'], ['北京', '长沙', '呼和浩特'], ['北京', '长沙', '南宁'], ['北京', '长沙', '香港'], ['北京', '长沙', '澳门'], ['北京', '太原', '石家庄'], ['北京', '太原', '武汉'], ['北京', '太原', '郑州'], ['北京', '太原', '济南'], ['北京', '太原', '合肥'], ['北京', '太原', '南昌'], ['北京', '太原', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '太原', '天津'], ['北京', '太原', '呼和浩特'], ['北京', '太原', '银川'], ['北京', '太原', '澳门'], ['北京', '天津', '石家庄'], ['北京', '天津', '武汉'], ['北京', '天津', '郑州'], ['北京', '天津', '济南'], ['北京', '天津', '南京'], ['北京', '天津', '合肥'], ['北京', '天津', '杭州'], ['北京', '天津', '南昌'], ['北京', '天津', '长沙'], ['北京', '天津', '太原'], ['北京', '天津', '上海'], ['北京', '天津', '呼和浩特']]\n",
      "pathes [['北京', '石家庄', '武汉'], ['北京', '石家庄', '郑州'], ['北京', '石家庄', '济南'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '合肥'], ['北京', '石家庄', '南昌'], ['北京', '石家庄', '广州'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门'], ['北京', '杭州', '武汉'], ['北京', '杭州', '济南'], ['北京', '杭州', '南京'], ['北京', '杭州', '合肥'], ['北京', '杭州', '南昌'], ['北京', '杭州', '福州'], ['北京', '杭州', '上海'], ['北京', '杭州', '天津'], ['北京', '南昌', '石家庄'], ['北京', '南昌', '武汉'], ['北京', '南昌', '郑州'], ['北京', '南昌', '济南'], ['北京', '南昌', '南京'], ['北京', '南昌', '合肥'], ['北京', '南昌', '杭州'], ['北京', '南昌', '福州'], ['北京', '南昌', '广州'], ['北京', '南昌', '长沙'], ['北京', '南昌', '太原'], ['北京', '南昌', '上海'], ['北京', '南昌', '天津'], ['北京', '南昌', '香港'], ['北京', '南昌', '澳门'], ['北京', '长沙', '石家庄'], ['北京', '长沙', '武汉'], ['北京', '长沙', '郑州'], ['北京', '长沙', '济南'], ['北京', '长沙', '南京'], ['北京', '长沙', '合肥'], ['北京', '长沙', '南昌'], ['北京', '长沙', '广州'], ['北京', '长沙', '太原'], ['北京', '长沙', '西安'], ['北京', '长沙', '天津'], ['北京', '长沙', '呼和浩特'], ['北京', '长沙', '南宁'], ['北京', '长沙', '香港'], ['北京', '长沙', '澳门'], ['北京', '太原', '石家庄'], ['北京', '太原', '武汉'], ['北京', '太原', '郑州'], ['北京', '太原', '济南'], ['北京', '太原', '合肥'], ['北京', '太原', '南昌'], ['北京', '太原', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '太原', '天津'], ['北京', '太原', '呼和浩特'], ['北京', '太原', '银川'], ['北京', '太原', '澳门'], ['北京', '天津', '石家庄'], ['北京', '天津', '武汉'], ['北京', '天津', '郑州'], ['北京', '天津', '济南'], ['北京', '天津', '南京'], ['北京', '天津', '合肥'], ['北京', '天津', '杭州'], ['北京', '天津', '南昌'], ['北京', '天津', '长沙'], ['北京', '天津', '太原'], ['北京', '天津', '上海'], ['北京', '天津', '呼和浩特'], ['北京', '呼和浩特', '石家庄'], ['北京', '呼和浩特', '武汉'], ['北京', '呼和浩特', '郑州'], ['北京', '呼和浩特', '济南'], ['北京', '呼和浩特', '长沙'], ['北京', '呼和浩特', '太原'], ['北京', '呼和浩特', '西安'], ['北京', '呼和浩特', '重庆'], ['北京', '呼和浩特', '天津'], ['北京', '呼和浩特', '银川']]\n",
      "pathes [['北京', '石家庄', '长沙'], ['北京', '石家庄', '太原'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门'], ['北京', '杭州', '武汉'], ['北京', '杭州', '济南'], ['北京', '杭州', '南京'], ['北京', '杭州', '合肥'], ['北京', '杭州', '南昌'], ['北京', '杭州', '福州'], ['北京', '杭州', '上海'], ['北京', '杭州', '天津'], ['北京', '南昌', '石家庄'], ['北京', '南昌', '武汉'], ['北京', '南昌', '郑州'], ['北京', '南昌', '济南'], ['北京', '南昌', '南京'], ['北京', '南昌', '合肥'], ['北京', '南昌', '杭州'], ['北京', '南昌', '福州'], ['北京', '南昌', '广州'], ['北京', '南昌', '长沙'], ['北京', '南昌', '太原'], ['北京', '南昌', '上海'], ['北京', '南昌', '天津'], ['北京', '南昌', '香港'], ['北京', '南昌', '澳门'], ['北京', '长沙', '石家庄'], ['北京', '长沙', '武汉'], ['北京', '长沙', '郑州'], ['北京', '长沙', '济南'], ['北京', '长沙', '南京'], ['北京', '长沙', '合肥'], ['北京', '长沙', '南昌'], ['北京', '长沙', '广州'], ['北京', '长沙', '太原'], ['北京', '长沙', '西安'], ['北京', '长沙', '天津'], ['北京', '长沙', '呼和浩特'], ['北京', '长沙', '南宁'], ['北京', '长沙', '香港'], ['北京', '长沙', '澳门'], ['北京', '太原', '石家庄'], ['北京', '太原', '武汉'], ['北京', '太原', '郑州'], ['北京', '太原', '济南'], ['北京', '太原', '合肥'], ['北京', '太原', '南昌'], ['北京', '太原', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '太原', '天津'], ['北京', '太原', '呼和浩特'], ['北京', '太原', '银川'], ['北京', '太原', '澳门'], ['北京', '天津', '石家庄'], ['北京', '天津', '武汉'], ['北京', '天津', '郑州'], ['北京', '天津', '济南'], ['北京', '天津', '南京'], ['北京', '天津', '合肥'], ['北京', '天津', '杭州'], ['北京', '天津', '南昌'], ['北京', '天津', '长沙'], ['北京', '天津', '太原'], ['北京', '天津', '上海'], ['北京', '天津', '呼和浩特'], ['北京', '呼和浩特', '石家庄'], ['北京', '呼和浩特', '武汉'], ['北京', '呼和浩特', '郑州'], ['北京', '呼和浩特', '济南'], ['北京', '呼和浩特', '长沙'], ['北京', '呼和浩特', '太原'], ['北京', '呼和浩特', '西安'], ['北京', '呼和浩特', '重庆'], ['北京', '呼和浩特', '天津'], ['北京', '呼和浩特', '银川'], ['北京', '石家庄', '广州', '武汉'], ['北京', '石家庄', '广州', '郑州'], ['北京', '石家庄', '广州', '合肥'], ['北京', '石家庄', '广州', '南昌'], ['北京', '石家庄', '广州', '福州'], ['北京', '石家庄', '广州', '长沙'], ['北京', '石家庄', '广州', '太原'], ['北京', '石家庄', '广州', '西安'], ['北京', '石家庄', '广州', '南宁'], ['北京', '石家庄', '广州', '香港'], ['北京', '石家庄', '广州', '澳门']]\n",
      "pathes [['北京', '石家庄', '天津'], ['北京', '石家庄', '呼和浩特'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '郑州'], ['北京', '武汉', '济南'], ['北京', '武汉', '南京'], ['北京', '武汉', '合肥'], ['北京', '武汉', '杭州'], ['北京', '武汉', '南昌'], ['北京', '武汉', '福州'], ['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门'], ['北京', '杭州', '武汉'], ['北京', '杭州', '济南'], ['北京', '杭州', '南京'], ['北京', '杭州', '合肥'], ['北京', '杭州', '南昌'], ['北京', '杭州', '福州'], ['北京', '杭州', '上海'], ['北京', '杭州', '天津'], ['北京', '南昌', '石家庄'], ['北京', '南昌', '武汉'], ['北京', '南昌', '郑州'], ['北京', '南昌', '济南'], ['北京', '南昌', '南京'], ['北京', '南昌', '合肥'], ['北京', '南昌', '杭州'], ['北京', '南昌', '福州'], ['北京', '南昌', '广州'], ['北京', '南昌', '长沙'], ['北京', '南昌', '太原'], ['北京', '南昌', '上海'], ['北京', '南昌', '天津'], ['北京', '南昌', '香港'], ['北京', '南昌', '澳门'], ['北京', '长沙', '石家庄'], ['北京', '长沙', '武汉'], ['北京', '长沙', '郑州'], ['北京', '长沙', '济南'], ['北京', '长沙', '南京'], ['北京', '长沙', '合肥'], ['北京', '长沙', '南昌'], ['北京', '长沙', '广州'], ['北京', '长沙', '太原'], ['北京', '长沙', '西安'], ['北京', '长沙', '天津'], ['北京', '长沙', '呼和浩特'], ['北京', '长沙', '南宁'], ['北京', '长沙', '香港'], ['北京', '长沙', '澳门'], ['北京', '太原', '石家庄'], ['北京', '太原', '武汉'], ['北京', '太原', '郑州'], ['北京', '太原', '济南'], ['北京', '太原', '合肥'], ['北京', '太原', '南昌'], ['北京', '太原', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '太原', '天津'], ['北京', '太原', '呼和浩特'], ['北京', '太原', '银川'], ['北京', '太原', '澳门'], ['北京', '天津', '石家庄'], ['北京', '天津', '武汉'], ['北京', '天津', '郑州'], ['北京', '天津', '济南'], ['北京', '天津', '南京'], ['北京', '天津', '合肥'], ['北京', '天津', '杭州'], ['北京', '天津', '南昌'], ['北京', '天津', '长沙'], ['北京', '天津', '太原'], ['北京', '天津', '上海'], ['北京', '天津', '呼和浩特'], ['北京', '呼和浩特', '石家庄'], ['北京', '呼和浩特', '武汉'], ['北京', '呼和浩特', '郑州'], ['北京', '呼和浩特', '济南'], ['北京', '呼和浩特', '长沙'], ['北京', '呼和浩特', '太原'], ['北京', '呼和浩特', '西安'], ['北京', '呼和浩特', '重庆'], ['北京', '呼和浩特', '天津'], ['北京', '呼和浩特', '银川'], ['北京', '石家庄', '广州', '武汉'], ['北京', '石家庄', '广州', '郑州'], ['北京', '石家庄', '广州', '合肥'], ['北京', '石家庄', '广州', '南昌'], ['北京', '石家庄', '广州', '福州'], ['北京', '石家庄', '广州', '长沙'], ['北京', '石家庄', '广州', '太原'], ['北京', '石家庄', '广州', '西安'], ['北京', '石家庄', '广州', '南宁'], ['北京', '石家庄', '广州', '香港'], ['北京', '石家庄', '广州', '澳门'], ['北京', '石家庄', '西安', '兰州'], ['北京', '石家庄', '西安', '成都'], ['北京', '石家庄', '西安', '贵阳'], ['北京', '石家庄', '西安', '武汉'], ['北京', '石家庄', '西安', '郑州'], ['北京', '石家庄', '西安', '广州'], ['北京', '石家庄', '西安', '长沙'], ['北京', '石家庄', '西安', '太原'], ['北京', '石家庄', '西安', '重庆'], ['北京', '石家庄', '西安', '呼和浩特'], ['北京', '石家庄', '西安', '南宁'], ['北京', '石家庄', '西安', '银川']]\n",
      "pathes [['北京', '武汉', '广州'], ['北京', '武汉', '长沙'], ['北京', '武汉', '太原'], ['北京', '武汉', '西安'], ['北京', '武汉', '天津'], ['北京', '武汉', '呼和浩特'], ['北京', '武汉', '香港'], ['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门'], ['北京', '杭州', '武汉'], ['北京', '杭州', '济南'], ['北京', '杭州', '南京'], ['北京', '杭州', '合肥'], ['北京', '杭州', '南昌'], ['北京', '杭州', '福州'], ['北京', '杭州', '上海'], ['北京', '杭州', '天津'], ['北京', '南昌', '石家庄'], ['北京', '南昌', '武汉'], ['北京', '南昌', '郑州'], ['北京', '南昌', '济南'], ['北京', '南昌', '南京'], ['北京', '南昌', '合肥'], ['北京', '南昌', '杭州'], ['北京', '南昌', '福州'], ['北京', '南昌', '广州'], ['北京', '南昌', '长沙'], ['北京', '南昌', '太原'], ['北京', '南昌', '上海'], ['北京', '南昌', '天津'], ['北京', '南昌', '香港'], ['北京', '南昌', '澳门'], ['北京', '长沙', '石家庄'], ['北京', '长沙', '武汉'], ['北京', '长沙', '郑州'], ['北京', '长沙', '济南'], ['北京', '长沙', '南京'], ['北京', '长沙', '合肥'], ['北京', '长沙', '南昌'], ['北京', '长沙', '广州'], ['北京', '长沙', '太原'], ['北京', '长沙', '西安'], ['北京', '长沙', '天津'], ['北京', '长沙', '呼和浩特'], ['北京', '长沙', '南宁'], ['北京', '长沙', '香港'], ['北京', '长沙', '澳门'], ['北京', '太原', '石家庄'], ['北京', '太原', '武汉'], ['北京', '太原', '郑州'], ['北京', '太原', '济南'], ['北京', '太原', '合肥'], ['北京', '太原', '南昌'], ['北京', '太原', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '太原', '天津'], ['北京', '太原', '呼和浩特'], ['北京', '太原', '银川'], ['北京', '太原', '澳门'], ['北京', '天津', '石家庄'], ['北京', '天津', '武汉'], ['北京', '天津', '郑州'], ['北京', '天津', '济南'], ['北京', '天津', '南京'], ['北京', '天津', '合肥'], ['北京', '天津', '杭州'], ['北京', '天津', '南昌'], ['北京', '天津', '长沙'], ['北京', '天津', '太原'], ['北京', '天津', '上海'], ['北京', '天津', '呼和浩特'], ['北京', '呼和浩特', '石家庄'], ['北京', '呼和浩特', '武汉'], ['北京', '呼和浩特', '郑州'], ['北京', '呼和浩特', '济南'], ['北京', '呼和浩特', '长沙'], ['北京', '呼和浩特', '太原'], ['北京', '呼和浩特', '西安'], ['北京', '呼和浩特', '重庆'], ['北京', '呼和浩特', '天津'], ['北京', '呼和浩特', '银川'], ['北京', '石家庄', '广州', '武汉'], ['北京', '石家庄', '广州', '郑州'], ['北京', '石家庄', '广州', '合肥'], ['北京', '石家庄', '广州', '南昌'], ['北京', '石家庄', '广州', '福州'], ['北京', '石家庄', '广州', '长沙'], ['北京', '石家庄', '广州', '太原'], ['北京', '石家庄', '广州', '西安'], ['北京', '石家庄', '广州', '南宁'], ['北京', '石家庄', '广州', '香港'], ['北京', '石家庄', '广州', '澳门'], ['北京', '石家庄', '西安', '兰州'], ['北京', '石家庄', '西安', '成都'], ['北京', '石家庄', '西安', '贵阳'], ['北京', '石家庄', '西安', '武汉'], ['北京', '石家庄', '西安', '郑州'], ['北京', '石家庄', '西安', '广州'], ['北京', '石家庄', '西安', '长沙'], ['北京', '石家庄', '西安', '太原'], ['北京', '石家庄', '西安', '重庆'], ['北京', '石家庄', '西安', '呼和浩特'], ['北京', '石家庄', '西安', '南宁'], ['北京', '石家庄', '西安', '银川'], ['北京', '武汉', '福州', '济南'], ['北京', '武汉', '福州', '南京'], ['北京', '武汉', '福州', '合肥'], ['北京', '武汉', '福州', '杭州'], ['北京', '武汉', '福州', '南昌'], ['北京', '武汉', '福州', '广州'], ['北京', '武汉', '福州', '上海'], ['北京', '武汉', '福州', '香港'], ['北京', '武汉', '福州', '澳门']]\n",
      "pathes [['北京', '武汉', '澳门'], ['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门'], ['北京', '杭州', '武汉'], ['北京', '杭州', '济南'], ['北京', '杭州', '南京'], ['北京', '杭州', '合肥'], ['北京', '杭州', '南昌'], ['北京', '杭州', '福州'], ['北京', '杭州', '上海'], ['北京', '杭州', '天津'], ['北京', '南昌', '石家庄'], ['北京', '南昌', '武汉'], ['北京', '南昌', '郑州'], ['北京', '南昌', '济南'], ['北京', '南昌', '南京'], ['北京', '南昌', '合肥'], ['北京', '南昌', '杭州'], ['北京', '南昌', '福州'], ['北京', '南昌', '广州'], ['北京', '南昌', '长沙'], ['北京', '南昌', '太原'], ['北京', '南昌', '上海'], ['北京', '南昌', '天津'], ['北京', '南昌', '香港'], ['北京', '南昌', '澳门'], ['北京', '长沙', '石家庄'], ['北京', '长沙', '武汉'], ['北京', '长沙', '郑州'], ['北京', '长沙', '济南'], ['北京', '长沙', '南京'], ['北京', '长沙', '合肥'], ['北京', '长沙', '南昌'], ['北京', '长沙', '广州'], ['北京', '长沙', '太原'], ['北京', '长沙', '西安'], ['北京', '长沙', '天津'], ['北京', '长沙', '呼和浩特'], ['北京', '长沙', '南宁'], ['北京', '长沙', '香港'], ['北京', '长沙', '澳门'], ['北京', '太原', '石家庄'], ['北京', '太原', '武汉'], ['北京', '太原', '郑州'], ['北京', '太原', '济南'], ['北京', '太原', '合肥'], ['北京', '太原', '南昌'], ['北京', '太原', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '太原', '天津'], ['北京', '太原', '呼和浩特'], ['北京', '太原', '银川'], ['北京', '太原', '澳门'], ['北京', '天津', '石家庄'], ['北京', '天津', '武汉'], ['北京', '天津', '郑州'], ['北京', '天津', '济南'], ['北京', '天津', '南京'], ['北京', '天津', '合肥'], ['北京', '天津', '杭州'], ['北京', '天津', '南昌'], ['北京', '天津', '长沙'], ['北京', '天津', '太原'], ['北京', '天津', '上海'], ['北京', '天津', '呼和浩特'], ['北京', '呼和浩特', '石家庄'], ['北京', '呼和浩特', '武汉'], ['北京', '呼和浩特', '郑州'], ['北京', '呼和浩特', '济南'], ['北京', '呼和浩特', '长沙'], ['北京', '呼和浩特', '太原'], ['北京', '呼和浩特', '西安'], ['北京', '呼和浩特', '重庆'], ['北京', '呼和浩特', '天津'], ['北京', '呼和浩特', '银川'], ['北京', '石家庄', '广州', '武汉'], ['北京', '石家庄', '广州', '郑州'], ['北京', '石家庄', '广州', '合肥'], ['北京', '石家庄', '广州', '南昌'], ['北京', '石家庄', '广州', '福州'], ['北京', '石家庄', '广州', '长沙'], ['北京', '石家庄', '广州', '太原'], ['北京', '石家庄', '广州', '西安'], ['北京', '石家庄', '广州', '南宁'], ['北京', '石家庄', '广州', '香港'], ['北京', '石家庄', '广州', '澳门'], ['北京', '石家庄', '西安', '兰州'], ['北京', '石家庄', '西安', '成都'], ['北京', '石家庄', '西安', '贵阳'], ['北京', '石家庄', '西安', '武汉'], ['北京', '石家庄', '西安', '郑州'], ['北京', '石家庄', '西安', '广州'], ['北京', '石家庄', '西安', '长沙'], ['北京', '石家庄', '西安', '太原'], ['北京', '石家庄', '西安', '重庆'], ['北京', '石家庄', '西安', '呼和浩特'], ['北京', '石家庄', '西安', '南宁'], ['北京', '石家庄', '西安', '银川'], ['北京', '武汉', '福州', '济南'], ['北京', '武汉', '福州', '南京'], ['北京', '武汉', '福州', '合肥'], ['北京', '武汉', '福州', '杭州'], ['北京', '武汉', '福州', '南昌'], ['北京', '武汉', '福州', '广州'], ['北京', '武汉', '福州', '上海'], ['北京', '武汉', '福州', '香港'], ['北京', '武汉', '福州', '澳门'], ['北京', '武汉', '香港', '郑州'], ['北京', '武汉', '香港', '合肥'], ['北京', '武汉', '香港', '南昌'], ['北京', '武汉', '香港', '福州'], ['北京', '武汉', '香港', '广州'], ['北京', '武汉', '香港', '长沙'], ['北京', '武汉', '香港', '南宁'], ['北京', '武汉', '香港', '澳门']]\n",
      "pathes [['北京', '郑州', '石家庄'], ['北京', '郑州', '武汉'], ['北京', '郑州', '济南'], ['北京', '郑州', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '南昌'], ['北京', '郑州', '广州'], ['北京', '郑州', '长沙'], ['北京', '郑州', '太原'], ['北京', '郑州', '西安'], ['北京', '郑州', '天津'], ['北京', '郑州', '呼和浩特'], ['北京', '郑州', '香港'], ['北京', '郑州', '澳门'], ['北京', '济南', '石家庄'], ['北京', '济南', '武汉'], ['北京', '济南', '郑州'], ['北京', '济南', '南京'], ['北京', '济南', '合肥'], ['北京', '济南', '杭州'], ['北京', '济南', '南昌'], ['北京', '济南', '福州'], ['北京', '济南', '长沙'], ['北京', '济南', '太原'], ['北京', '济南', '上海'], ['北京', '济南', '天津'], ['北京', '济南', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '南京', '武汉'], ['北京', '南京', '郑州'], ['北京', '南京', '济南'], ['北京', '南京', '合肥'], ['北京', '南京', '杭州'], ['北京', '南京', '南昌'], ['北京', '南京', '福州'], ['北京', '南京', '长沙'], ['北京', '南京', '上海'], ['北京', '南京', '天津'], ['北京', '合肥', '石家庄'], ['北京', '合肥', '武汉'], ['北京', '合肥', '郑州'], ['北京', '合肥', '济南'], ['北京', '合肥', '南京'], ['北京', '合肥', '杭州'], ['北京', '合肥', '南昌'], ['北京', '合肥', '福州'], ['北京', '合肥', '广州'], ['北京', '合肥', '长沙'], ['北京', '合肥', '太原'], ['北京', '合肥', '上海'], ['北京', '合肥', '天津'], ['北京', '合肥', '香港'], ['北京', '合肥', '澳门'], ['北京', '杭州', '武汉'], ['北京', '杭州', '济南'], ['北京', '杭州', '南京'], ['北京', '杭州', '合肥'], ['北京', '杭州', '南昌'], ['北京', '杭州', '福州'], ['北京', '杭州', '上海'], ['北京', '杭州', '天津'], ['北京', '南昌', '石家庄'], ['北京', '南昌', '武汉'], ['北京', '南昌', '郑州'], ['北京', '南昌', '济南'], ['北京', '南昌', '南京'], ['北京', '南昌', '合肥'], ['北京', '南昌', '杭州'], ['北京', '南昌', '福州'], ['北京', '南昌', '广州'], ['北京', '南昌', '长沙'], ['北京', '南昌', '太原'], ['北京', '南昌', '上海'], ['北京', '南昌', '天津'], ['北京', '南昌', '香港'], ['北京', '南昌', '澳门'], ['北京', '长沙', '石家庄'], ['北京', '长沙', '武汉'], ['北京', '长沙', '郑州'], ['北京', '长沙', '济南'], ['北京', '长沙', '南京'], ['北京', '长沙', '合肥'], ['北京', '长沙', '南昌'], ['北京', '长沙', '广州'], ['北京', '长沙', '太原'], ['北京', '长沙', '西安'], ['北京', '长沙', '天津'], ['北京', '长沙', '呼和浩特'], ['北京', '长沙', '南宁'], ['北京', '长沙', '香港'], ['北京', '长沙', '澳门'], ['北京', '太原', '石家庄'], ['北京', '太原', '武汉'], ['北京', '太原', '郑州'], ['北京', '太原', '济南'], ['北京', '太原', '合肥'], ['北京', '太原', '南昌'], ['北京', '太原', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '太原', '天津'], ['北京', '太原', '呼和浩特'], ['北京', '太原', '银川'], ['北京', '太原', '澳门'], ['北京', '天津', '石家庄'], ['北京', '天津', '武汉'], ['北京', '天津', '郑州'], ['北京', '天津', '济南'], ['北京', '天津', '南京'], ['北京', '天津', '合肥'], ['北京', '天津', '杭州'], ['北京', '天津', '南昌'], ['北京', '天津', '长沙'], ['北京', '天津', '太原'], ['北京', '天津', '上海'], ['北京', '天津', '呼和浩特'], ['北京', '呼和浩特', '石家庄'], ['北京', '呼和浩特', '武汉'], ['北京', '呼和浩特', '郑州'], ['北京', '呼和浩特', '济南'], ['北京', '呼和浩特', '长沙'], ['北京', '呼和浩特', '太原'], ['北京', '呼和浩特', '西安'], ['北京', '呼和浩特', '重庆'], ['北京', '呼和浩特', '天津'], ['北京', '呼和浩特', '银川'], ['北京', '石家庄', '广州', '武汉'], ['北京', '石家庄', '广州', '郑州'], ['北京', '石家庄', '广州', '合肥'], ['北京', '石家庄', '广州', '南昌'], ['北京', '石家庄', '广州', '福州'], ['北京', '石家庄', '广州', '长沙'], ['北京', '石家庄', '广州', '太原'], ['北京', '石家庄', '广州', '西安'], ['北京', '石家庄', '广州', '南宁'], ['北京', '石家庄', '广州', '香港'], ['北京', '石家庄', '广州', '澳门'], ['北京', '石家庄', '西安', '兰州'], ['北京', '石家庄', '西安', '成都'], ['北京', '石家庄', '西安', '贵阳'], ['北京', '石家庄', '西安', '武汉'], ['北京', '石家庄', '西安', '郑州'], ['北京', '石家庄', '西安', '广州'], ['北京', '石家庄', '西安', '长沙'], ['北京', '石家庄', '西安', '太原'], ['北京', '石家庄', '西安', '重庆'], ['北京', '石家庄', '西安', '呼和浩特'], ['北京', '石家庄', '西安', '南宁'], ['北京', '石家庄', '西安', '银川'], ['北京', '武汉', '福州', '济南'], ['北京', '武汉', '福州', '南京'], ['北京', '武汉', '福州', '合肥'], ['北京', '武汉', '福州', '杭州'], ['北京', '武汉', '福州', '南昌'], ['北京', '武汉', '福州', '广州'], ['北京', '武汉', '福州', '上海'], ['北京', '武汉', '福州', '香港'], ['北京', '武汉', '福州', '澳门'], ['北京', '武汉', '香港', '郑州'], ['北京', '武汉', '香港', '合肥'], ['北京', '武汉', '香港', '南昌'], ['北京', '武汉', '香港', '福州'], ['北京', '武汉', '香港', '广州'], ['北京', '武汉', '香港', '长沙'], ['北京', '武汉', '香港', '南宁'], ['北京', '武汉', '香港', '澳门'], ['北京', '武汉', '澳门', '郑州'], ['北京', '武汉', '澳门', '合肥'], ['北京', '武汉', '澳门', '南昌'], ['北京', '武汉', '澳门', '福州'], ['北京', '武汉', '澳门', '广州'], ['北京', '武汉', '澳门', '长沙'], ['北京', '武汉', '澳门', '太原'], ['北京', '武汉', '澳门', '南宁'], ['北京', '武汉', '澳门', '香港']]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "['北京', '济南', '上海']"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "search_2(cities_connection,\"北京\",\"上海\",search_strategy=lambda x:x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "distance 237.96793898073724\n",
      "distance 507.1822625862953\n",
      "distance 395.55476788861756\n",
      "distance 174.19622349500776\n",
      "distance 480.71771026391417\n",
      "distance 414.5908069635816\n",
      "distance 655.9367799584197\n",
      "distance 554.2116951438225\n",
      "distance 665.2271362574077\n",
      "distance 447.0380076086443\n",
      "distance 91.33650798815006\n",
      "distance 536.3862585152772\n",
      "pathes [['北京', '天津'], ['北京', '济南'], ['北京', '石家庄'], ['北京', '郑州'], ['北京', '合肥'], ['北京', '太原'], ['北京', '南京'], ['北京', '武汉'], ['北京', '呼和浩特'], ['北京', '南昌'], ['北京', '杭州'], ['北京', '长沙']]\n",
      "distance 174.19622349500776\n",
      "distance 237.96793898073724\n",
      "distance 395.55476788861756\n",
      "distance 414.5908069635816\n",
      "distance 447.0380076086443\n",
      "distance 480.71771026391417\n",
      "distance 507.1822625862953\n",
      "distance 536.3862585152772\n",
      "distance 554.2116951438225\n",
      "distance 655.9367799584197\n",
      "distance 665.2271362574077\n",
      "distance 398.43722358705924\n",
      "distance 616.272157349062\n",
      "distance 537.5738428960327\n",
      "distance 218.90399287281144\n",
      "distance 500.63703357286425\n",
      "distance 461.1731228419497\n",
      "distance 669.1778706525284\n",
      "distance 629.9759221322245\n",
      "distance 784.8917046578065\n",
      "distance 613.9202370976619\n",
      "distance 732.5085345714293\n",
      "distance 713.281820755227\n",
      "pathes [['北京', '济南'], ['北京', '天津', '济南'], ['北京', '石家庄'], ['北京', '郑州'], ['北京', '天津', '石家庄'], ['北京', '合肥'], ['北京', '太原'], ['北京', '天津', '合肥'], ['北京', '南京'], ['北京', '天津', '南京'], ['北京', '武汉'], ['北京', '呼和浩特'], ['北京', '天津', '郑州'], ['北京', '南昌'], ['北京', '天津', '太原'], ['北京', '天津', '武汉'], ['北京', '天津', '南昌'], ['北京', '杭州'], ['北京', '长沙'], ['北京', '天津', '杭州'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '天津', '长沙']]\n",
      "distance 218.90399287281144\n",
      "distance 237.96793898073724\n",
      "distance 395.55476788861756\n",
      "distance 398.43722358705924\n",
      "distance 414.5908069635816\n",
      "distance 447.0380076086443\n",
      "distance 461.1731228419497\n",
      "distance 480.71771026391417\n",
      "distance 500.63703357286425\n",
      "distance 507.1822625862953\n",
      "distance 536.3862585152772\n",
      "distance 537.5738428960327\n",
      "distance 554.2116951438225\n",
      "distance 613.9202370976619\n",
      "distance 616.272157349062\n",
      "distance 629.9759221322245\n",
      "distance 655.9367799584197\n",
      "distance 665.2271362574077\n",
      "distance 669.1778706525284\n",
      "distance 713.281820755227\n",
      "distance 732.5085345714293\n",
      "distance 784.8917046578065\n",
      "distance 462.20529600122416\n",
      "distance 594.0391486127305\n",
      "distance 557.3489151909898\n",
      "distance 484.9918710247962\n",
      "distance 418.9096525273926\n",
      "distance 665.1610201144756\n",
      "distance 587.3945676549293\n",
      "distance 783.8891243265533\n",
      "distance 769.1407184718995\n",
      "distance 674.4506713881102\n",
      "distance 752.66259009181\n",
      "distance 301.76370837966914\n",
      "distance 798.6544016672909\n",
      "pathes [['北京', '天津', '济南'], ['北京', '石家庄'], ['北京', '济南', '天津'], ['北京', '郑州'], ['北京', '天津', '石家庄'], ['北京', '合肥'], ['北京', '济南', '合肥'], ['北京', '太原'], ['北京', '天津', '合肥'], ['北京', '济南', '石家庄'], ['北京', '南京'], ['北京', '济南', '南京'], ['北京', '天津', '南京'], ['北京', '武汉'], ['北京', '呼和浩特'], ['北京', '天津', '郑州'], ['北京', '南昌'], ['北京', '济南', '郑州'], ['北京', '济南', '南昌'], ['北京', '济南', '武汉'], ['北京', '天津', '太原'], ['北京', '天津', '武汉'], ['北京', '天津', '南昌'], ['北京', '杭州'], ['北京', '济南', '杭州'], ['北京', '长沙'], ['北京', '天津', '杭州'], ['北京', '济南', '太原'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '济南', '上海'], ['北京', '济南', '长沙'], ['北京', '济南', '福州'], ['北京', '天津', '长沙'], ['北京', '济南', '呼和浩特']]\n",
      "distance 301.76370837966914\n",
      "distance 395.55476788861756\n",
      "distance 398.43722358705924\n",
      "distance 414.5908069635816\n",
      "distance 418.9096525273926\n",
      "distance 447.0380076086443\n",
      "distance 461.1731228419497\n",
      "distance 462.20529600122416\n",
      "distance 480.71771026391417\n",
      "distance 484.9918710247962\n",
      "distance 500.63703357286425\n",
      "distance 507.1822625862953\n",
      "distance 536.3862585152772\n",
      "distance 537.5738428960327\n",
      "distance 554.2116951438225\n",
      "distance 557.3489151909898\n",
      "distance 587.3945676549293\n",
      "distance 594.0391486127305\n",
      "distance 613.9202370976619\n",
      "distance 616.272157349062\n",
      "distance 629.9759221322245\n",
      "distance 655.9367799584197\n",
      "distance 665.1610201144756\n",
      "distance 665.2271362574077\n",
      "distance 669.1778706525284\n",
      "distance 674.4506713881102\n",
      "distance 713.281820755227\n",
      "distance 732.5085345714293\n",
      "distance 752.66259009181\n",
      "distance 769.1407184718995\n",
      "distance 783.8891243265533\n",
      "distance 784.8917046578065\n",
      "distance 798.6544016672909\n",
      "distance 583.1854515460491\n",
      "distance 412.5829118917736\n",
      "distance 525.9770114869536\n",
      "distance 801.1193521350156\n",
      "distance 668.7542525052928\n",
      "distance 706.8195308617029\n",
      "distance 919.2125907610059\n",
      "distance 706.7495651467713\n",
      "distance 454.9139264202155\n",
      "distance 871.7370678343207\n",
      "distance 545.0686545796464\n",
      "distance 575.2242279701363\n",
      "pathes [['北京', '济南', '天津'], ['北京', '郑州'], ['北京', '天津', '石家庄'], ['北京', '石家庄', '郑州'], ['北京', '合肥'], ['北京', '济南', '合肥'], ['北京', '太原'], ['北京', '石家庄', '太原'], ['北京', '天津', '合肥'], ['北京', '济南', '石家庄'], ['北京', '南京'], ['北京', '济南', '南京'], ['北京', '天津', '南京'], ['北京', '武汉'], ['北京', '石家庄', '济南'], ['北京', '呼和浩特'], ['北京', '天津', '郑州'], ['北京', '石家庄', '天津'], ['北京', '南昌'], ['北京', '济南', '郑州'], ['北京', '石家庄', '呼和浩特'], ['北京', '石家庄', '武汉'], ['北京', '济南', '南昌'], ['北京', '济南', '武汉'], ['北京', '天津', '太原'], ['北京', '天津', '武汉'], ['北京', '天津', '南昌'], ['北京', '杭州'], ['北京', '济南', '杭州'], ['北京', '长沙'], ['北京', '石家庄', '合肥'], ['北京', '天津', '杭州'], ['北京', '济南', '太原'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '南昌'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '济南', '上海'], ['北京', '济南', '长沙'], ['北京', '济南', '福州'], ['北京', '天津', '长沙'], ['北京', '济南', '呼和浩特'], ['北京', '石家庄', '南京'], ['北京', '石家庄', '西安'], ['北京', '石家庄', '广州']]\n",
      "distance 398.43722358705924\n",
      "distance 412.5829118917736\n",
      "distance 414.5908069635816\n",
      "distance 418.9096525273926\n",
      "distance 447.0380076086443\n",
      "distance 454.9139264202155\n",
      "distance 461.1731228419497\n",
      "distance 462.20529600122416\n",
      "distance 480.71771026391417\n",
      "distance 484.9918710247962\n",
      "distance 500.63703357286425\n",
      "distance 507.1822625862953\n",
      "distance 525.9770114869536\n",
      "distance 536.3862585152772\n",
      "distance 537.5738428960327\n",
      "distance 545.0686545796464\n",
      "distance 554.2116951438225\n",
      "distance 557.3489151909898\n",
      "distance 575.2242279701363\n",
      "distance 583.1854515460491\n",
      "distance 587.3945676549293\n",
      "distance 594.0391486127305\n",
      "distance 613.9202370976619\n",
      "distance 616.272157349062\n",
      "distance 629.9759221322245\n",
      "distance 655.9367799584197\n",
      "distance 665.1610201144756\n",
      "distance 665.2271362574077\n",
      "distance 668.7542525052928\n",
      "distance 669.1778706525284\n",
      "distance 674.4506713881102\n",
      "distance 706.7495651467713\n",
      "distance 706.8195308617029\n",
      "distance 713.281820755227\n",
      "distance 732.5085345714293\n",
      "distance 752.66259009181\n",
      "distance 769.1407184718995\n",
      "distance 783.8891243265533\n",
      "distance 784.8917046578065\n",
      "distance 798.6544016672909\n",
      "distance 801.1193521350156\n",
      "distance 871.7370678343207\n",
      "distance 919.2125907610059\n",
      "distance 570.1697407996539\n",
      "distance 600.6904220941984\n",
      "distance 778.7074595845996\n",
      "distance 981.2836093051014\n",
      "distance 821.1702083473804\n",
      "distance 772.4588406117207\n",
      "distance 910.0135947873067\n",
      "distance 692.6983232350499\n",
      "distance 579.6438258013784\n",
      "distance 918.5411988407039\n",
      "distance 841.7921027965002\n",
      "distance 737.0482863704798\n",
      "distance 960.0048474851935\n",
      "distance 954.2089418546102\n",
      "pathes [['北京', '天津', '石家庄'], ['北京', '石家庄', '郑州'], ['北京', '合肥'], ['北京', '济南', '合肥'], ['北京', '太原'], ['北京', '石家庄', '太原'], ['北京', '天津', '合肥'], ['北京', '济南', '石家庄'], ['北京', '南京'], ['北京', '济南', '南京'], ['北京', '天津', '南京'], ['北京', '武汉'], ['北京', '石家庄', '济南'], ['北京', '呼和浩特'], ['北京', '天津', '郑州'], ['北京', '石家庄', '天津'], ['北京', '南昌'], ['北京', '济南', '郑州'], ['北京', '郑州', '石家庄'], ['北京', '石家庄', '呼和浩特'], ['北京', '郑州', '太原'], ['北京', '石家庄', '武汉'], ['北京', '济南', '南昌'], ['北京', '济南', '武汉'], ['北京', '郑州', '武汉'], ['北京', '天津', '太原'], ['北京', '天津', '武汉'], ['北京', '天津', '南昌'], ['北京', '杭州'], ['北京', '济南', '杭州'], ['北京', '长沙'], ['北京', '石家庄', '合肥'], ['北京', '天津', '杭州'], ['北京', '济南', '太原'], ['北京', '郑州', '长沙'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '南昌'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '郑州', '呼和浩特'], ['北京', '济南', '上海'], ['北京', '济南', '长沙'], ['北京', '郑州', '南昌'], ['北京', '郑州', '济南'], ['北京', '济南', '福州'], ['北京', '天津', '长沙'], ['北京', '济南', '呼和浩特'], ['北京', '石家庄', '南京'], ['北京', '郑州', '合肥'], ['北京', '郑州', '天津'], ['北京', '石家庄', '西安'], ['北京', '郑州', '广州'], ['北京', '郑州', '西安'], ['北京', '石家庄', '广州'], ['北京', '郑州', '澳门'], ['北京', '郑州', '香港'], ['北京', '郑州', '南京']]\n",
      "distance 418.9096525273926\n",
      "distance 447.0380076086443\n",
      "distance 454.9139264202155\n",
      "distance 461.1731228419497\n",
      "distance 462.20529600122416\n",
      "distance 480.71771026391417\n",
      "distance 484.9918710247962\n",
      "distance 500.63703357286425\n",
      "distance 507.1822625862953\n",
      "distance 525.9770114869536\n",
      "distance 536.3862585152772\n",
      "distance 537.5738428960327\n",
      "distance 545.0686545796464\n",
      "distance 554.2116951438225\n",
      "distance 557.3489151909898\n",
      "distance 570.1697407996539\n",
      "distance 575.2242279701363\n",
      "distance 579.6438258013784\n",
      "distance 583.1854515460491\n",
      "distance 587.3945676549293\n",
      "distance 594.0391486127305\n",
      "distance 600.6904220941984\n",
      "distance 613.9202370976619\n",
      "distance 616.272157349062\n",
      "distance 629.9759221322245\n",
      "distance 655.9367799584197\n",
      "distance 665.1610201144756\n",
      "distance 665.2271362574077\n",
      "distance 668.7542525052928\n",
      "distance 669.1778706525284\n",
      "distance 674.4506713881102\n",
      "distance 692.6983232350499\n",
      "distance 706.7495651467713\n",
      "distance 706.8195308617029\n",
      "distance 713.281820755227\n",
      "distance 732.5085345714293\n",
      "distance 737.0482863704798\n",
      "distance 752.66259009181\n",
      "distance 769.1407184718995\n",
      "distance 772.4588406117207\n",
      "distance 778.7074595845996\n",
      "distance 783.8891243265533\n",
      "distance 784.8917046578065\n",
      "distance 798.6544016672909\n",
      "distance 801.1193521350156\n",
      "distance 821.1702083473804\n",
      "distance 841.7921027965002\n",
      "distance 871.7370678343207\n",
      "distance 910.0135947873067\n",
      "distance 918.5411988407039\n",
      "distance 919.2125907610059\n",
      "distance 954.2089418546102\n",
      "distance 960.0048474851935\n",
      "distance 981.2836093051014\n",
      "distance 845.3771204881372\n",
      "distance 750.0316099790227\n",
      "distance 840.2062474223444\n",
      "distance 659.3042359959665\n",
      "distance 582.7581259728497\n",
      "distance 750.3270721178768\n",
      "distance 634.9505592217768\n",
      "distance 793.4476756629472\n",
      "distance 1023.5287887397822\n",
      "distance 919.5128966166421\n",
      "distance 1011.4427449932836\n",
      "distance 884.0150432656982\n",
      "distance 784.4274218173812\n",
      "distance 990.2669894670754\n",
      "distance 1033.7314234505639\n",
      "pathes [['北京', '济南', '合肥'], ['北京', '太原'], ['北京', '石家庄', '太原'], ['北京', '天津', '合肥'], ['北京', '济南', '石家庄'], ['北京', '南京'], ['北京', '济南', '南京'], ['北京', '天津', '南京'], ['北京', '武汉'], ['北京', '石家庄', '济南'], ['北京', '呼和浩特'], ['北京', '天津', '郑州'], ['北京', '石家庄', '天津'], ['北京', '南昌'], ['北京', '济南', '郑州'], ['北京', '郑州', '石家庄'], ['北京', '石家庄', '呼和浩特'], ['北京', '郑州', '太原'], ['北京', '合肥', '南京'], ['北京', '石家庄', '武汉'], ['北京', '济南', '南昌'], ['北京', '济南', '武汉'], ['北京', '郑州', '武汉'], ['北京', '天津', '太原'], ['北京', '天津', '武汉'], ['北京', '天津', '南昌'], ['北京', '合肥', '南昌'], ['北京', '杭州'], ['北京', '合肥', '济南'], ['北京', '济南', '杭州'], ['北京', '长沙'], ['北京', '石家庄', '合肥'], ['北京', '天津', '杭州'], ['北京', '济南', '太原'], ['北京', '郑州', '长沙'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '南昌'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '郑州', '呼和浩特'], ['北京', '合肥', '武汉'], ['北京', '合肥', '杭州'], ['北京', '济南', '上海'], ['北京', '济南', '长沙'], ['北京', '郑州', '南昌'], ['北京', '郑州', '济南'], ['北京', '济南', '福州'], ['北京', '合肥', '天津'], ['北京', '天津', '长沙'], ['北京', '合肥', '福州'], ['北京', '济南', '呼和浩特'], ['北京', '石家庄', '南京'], ['北京', '郑州', '合肥'], ['北京', '合肥', '郑州'], ['北京', '郑州', '天津'], ['北京', '合肥', '石家庄'], ['北京', '石家庄', '西安'], ['北京', '合肥', '上海'], ['北京', '郑州', '广州'], ['北京', '郑州', '西安'], ['北京', '石家庄', '广州'], ['北京', '合肥', '长沙'], ['北京', '郑州', '澳门'], ['北京', '郑州', '香港'], ['北京', '郑州', '南京'], ['北京', '合肥', '香港'], ['北京', '合肥', '太原'], ['北京', '合肥', '广州'], ['北京', '合肥', '澳门']]\n",
      "distance 454.9139264202155\n",
      "distance 461.1731228419497\n",
      "distance 462.20529600122416\n",
      "distance 480.71771026391417\n",
      "distance 484.9918710247962\n",
      "distance 500.63703357286425\n",
      "distance 507.1822625862953\n",
      "distance 525.9770114869536\n",
      "distance 536.3862585152772\n",
      "distance 537.5738428960327\n",
      "distance 545.0686545796464\n",
      "distance 554.2116951438225\n",
      "distance 557.3489151909898\n",
      "distance 570.1697407996539\n",
      "distance 575.2242279701363\n",
      "distance 579.6438258013784\n",
      "distance 582.7581259728497\n",
      "distance 583.1854515460491\n",
      "distance 587.3945676549293\n",
      "distance 594.0391486127305\n",
      "distance 600.6904220941984\n",
      "distance 613.9202370976619\n",
      "distance 616.272157349062\n",
      "distance 629.9759221322245\n",
      "distance 634.9505592217768\n",
      "distance 655.9367799584197\n",
      "distance 659.3042359959665\n",
      "distance 665.1610201144756\n",
      "distance 665.2271362574077\n",
      "distance 668.7542525052928\n",
      "distance 669.1778706525284\n",
      "distance 674.4506713881102\n",
      "distance 692.6983232350499\n",
      "distance 706.7495651467713\n",
      "distance 706.8195308617029\n",
      "distance 713.281820755227\n",
      "distance 732.5085345714293\n",
      "distance 737.0482863704798\n",
      "distance 750.0316099790227\n",
      "distance 750.3270721178768\n",
      "distance 752.66259009181\n",
      "distance 769.1407184718995\n",
      "distance 772.4588406117207\n",
      "distance 778.7074595845996\n",
      "distance 783.8891243265533\n",
      "distance 784.4274218173812\n",
      "distance 784.8917046578065\n",
      "distance 793.4476756629472\n",
      "distance 798.6544016672909\n",
      "distance 801.1193521350156\n",
      "distance 821.1702083473804\n",
      "distance 840.2062474223444\n",
      "distance 841.7921027965002\n",
      "distance 845.3771204881372\n",
      "distance 871.7370678343207\n",
      "distance 884.0150432656982\n",
      "distance 910.0135947873067\n",
      "distance 918.5411988407039\n",
      "distance 919.2125907610059\n",
      "distance 919.5128966166421\n",
      "distance 954.2089418546102\n",
      "distance 960.0048474851935\n",
      "distance 981.2836093051014\n",
      "distance 990.2669894670754\n",
      "distance 1011.4427449932836\n",
      "distance 1023.5287887397822\n",
      "distance 1033.7314234505639\n",
      "distance 663.9839950481226\n",
      "distance 827.0811069009287\n",
      "distance 631.1270655214053\n",
      "distance 947.2924555017468\n",
      "distance 1043.8899456383463\n",
      "distance 1007.4720028115942\n",
      "distance 1086.196901647063\n",
      "distance 865.516727418941\n",
      "distance 869.4266615234176\n",
      "distance 969.6217367181562\n",
      "distance 604.4656709669885\n",
      "distance 1143.4620734383043\n",
      "distance 1136.5215182708089\n",
      "pathes [['北京', '石家庄', '太原'], ['北京', '天津', '合肥'], ['北京', '济南', '石家庄'], ['北京', '南京'], ['北京', '济南', '南京'], ['北京', '天津', '南京'], ['北京', '武汉'], ['北京', '石家庄', '济南'], ['北京', '呼和浩特'], ['北京', '天津', '郑州'], ['北京', '石家庄', '天津'], ['北京', '南昌'], ['北京', '济南', '郑州'], ['北京', '郑州', '石家庄'], ['北京', '石家庄', '呼和浩特'], ['北京', '郑州', '太原'], ['北京', '合肥', '南京'], ['北京', '石家庄', '武汉'], ['北京', '济南', '南昌'], ['北京', '济南', '武汉'], ['北京', '郑州', '武汉'], ['北京', '太原', '呼和浩特'], ['北京', '天津', '太原'], ['北京', '天津', '武汉'], ['北京', '天津', '南昌'], ['北京', '太原', '郑州'], ['北京', '合肥', '南昌'], ['北京', '杭州'], ['北京', '合肥', '济南'], ['北京', '太原', '石家庄'], ['北京', '济南', '杭州'], ['北京', '长沙'], ['北京', '石家庄', '合肥'], ['北京', '天津', '杭州'], ['北京', '济南', '太原'], ['北京', '郑州', '长沙'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '南昌'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '郑州', '呼和浩特'], ['北京', '合肥', '武汉'], ['北京', '合肥', '杭州'], ['北京', '济南', '上海'], ['北京', '济南', '长沙'], ['北京', '郑州', '南昌'], ['北京', '郑州', '济南'], ['北京', '济南', '福州'], ['北京', '合肥', '天津'], ['北京', '天津', '长沙'], ['北京', '合肥', '福州'], ['北京', '济南', '呼和浩特'], ['北京', '石家庄', '南京'], ['北京', '郑州', '合肥'], ['北京', '太原', '武汉'], ['北京', '合肥', '郑州'], ['北京', '郑州', '天津'], ['北京', '合肥', '石家庄'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '石家庄', '西安'], ['北京', '合肥', '上海'], ['北京', '郑州', '广州'], ['北京', '郑州', '西安'], ['北京', '石家庄', '广州'], ['北京', '合肥', '长沙'], ['北京', '太原', '济南'], ['北京', '郑州', '澳门'], ['北京', '郑州', '香港'], ['北京', '太原', '天津'], ['北京', '郑州', '南京'], ['北京', '合肥', '香港'], ['北京', '太原', '南昌'], ['北京', '合肥', '太原'], ['北京', '合肥', '广州'], ['北京', '合肥', '澳门'], ['北京', '太原', '合肥'], ['北京', '太原', '广州'], ['北京', '太原', '澳门'], ['北京', '太原', '银川']]\n",
      "distance 484.9918710247962\n",
      "distance 500.63703357286425\n",
      "distance 507.1822625862953\n",
      "distance 525.9770114869536\n",
      "distance 536.3862585152772\n",
      "distance 537.5738428960327\n",
      "distance 545.0686545796464\n",
      "distance 554.2116951438225\n",
      "distance 557.3489151909898\n",
      "distance 570.1697407996539\n",
      "distance 575.2242279701363\n",
      "distance 579.6438258013784\n",
      "distance 582.7581259728497\n",
      "distance 583.1854515460491\n",
      "distance 587.3945676549293\n",
      "distance 594.0391486127305\n",
      "distance 600.6904220941984\n",
      "distance 604.4656709669885\n",
      "distance 613.9202370976619\n",
      "distance 616.272157349062\n",
      "distance 629.9759221322245\n",
      "distance 631.1270655214053\n",
      "distance 634.9505592217768\n",
      "distance 655.9367799584197\n",
      "distance 659.3042359959665\n",
      "distance 663.9839950481226\n",
      "distance 665.1610201144756\n",
      "distance 665.2271362574077\n",
      "distance 668.7542525052928\n",
      "distance 669.1778706525284\n",
      "distance 674.4506713881102\n",
      "distance 692.6983232350499\n",
      "distance 706.7495651467713\n",
      "distance 706.8195308617029\n",
      "distance 713.281820755227\n",
      "distance 732.5085345714293\n",
      "distance 737.0482863704798\n",
      "distance 750.0316099790227\n",
      "distance 750.3270721178768\n",
      "distance 752.66259009181\n",
      "distance 769.1407184718995\n",
      "distance 772.4588406117207\n",
      "distance 778.7074595845996\n",
      "distance 783.8891243265533\n",
      "distance 784.4274218173812\n",
      "distance 784.8917046578065\n",
      "distance 793.4476756629472\n",
      "distance 798.6544016672909\n",
      "distance 801.1193521350156\n",
      "distance 821.1702083473804\n",
      "distance 827.0811069009287\n",
      "distance 840.2062474223444\n",
      "distance 841.7921027965002\n",
      "distance 845.3771204881372\n",
      "distance 865.516727418941\n",
      "distance 869.4266615234176\n",
      "distance 871.7370678343207\n",
      "distance 884.0150432656982\n",
      "distance 910.0135947873067\n",
      "distance 918.5411988407039\n",
      "distance 919.2125907610059\n",
      "distance 919.5128966166421\n",
      "distance 947.2924555017468\n",
      "distance 954.2089418546102\n",
      "distance 960.0048474851935\n",
      "distance 969.6217367181562\n",
      "distance 981.2836093051014\n",
      "distance 990.2669894670754\n",
      "distance 1007.4720028115942\n",
      "distance 1011.4427449932836\n",
      "distance 1023.5287887397822\n",
      "distance 1033.7314234505639\n",
      "distance 1043.8899456383463\n",
      "distance 1086.196901647063\n",
      "distance 1136.5215182708089\n",
      "distance 1143.4620734383043\n",
      "distance 1043.8691234181924\n",
      "distance 983.427782705923\n",
      "distance 1066.446551680398\n",
      "distance 791.5133577937027\n",
      "distance 648.8850292731822\n",
      "distance 665.2884529456433\n",
      "distance 844.8855544789926\n",
      "distance 807.4504228619811\n",
      "distance 1149.476528201452\n",
      "distance 784.4063058191027\n",
      "distance 890.0182358486284\n",
      "pathes [['北京', '济南', '南京'], ['北京', '天津', '南京'], ['北京', '武汉'], ['北京', '石家庄', '济南'], ['北京', '呼和浩特'], ['北京', '天津', '郑州'], ['北京', '石家庄', '天津'], ['北京', '南昌'], ['北京', '济南', '郑州'], ['北京', '郑州', '石家庄'], ['北京', '石家庄', '呼和浩特'], ['北京', '郑州', '太原'], ['北京', '合肥', '南京'], ['北京', '石家庄', '武汉'], ['北京', '济南', '南昌'], ['北京', '济南', '武汉'], ['北京', '郑州', '武汉'], ['北京', '太原', '呼和浩特'], ['北京', '天津', '太原'], ['北京', '天津', '武汉'], ['北京', '天津', '南昌'], ['北京', '太原', '郑州'], ['北京', '合肥', '南昌'], ['北京', '南京', '合肥'], ['北京', '杭州'], ['北京', '合肥', '济南'], ['北京', '太原', '石家庄'], ['北京', '济南', '杭州'], ['北京', '长沙'], ['北京', '南京', '杭州'], ['北京', '石家庄', '合肥'], ['北京', '天津', '杭州'], ['北京', '济南', '太原'], ['北京', '郑州', '长沙'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '南昌'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '郑州', '呼和浩特'], ['北京', '合肥', '武汉'], ['北京', '合肥', '杭州'], ['北京', '济南', '上海'], ['北京', '济南', '长沙'], ['北京', '郑州', '南昌'], ['北京', '郑州', '济南'], ['北京', '济南', '福州'], ['北京', '南京', '上海'], ['北京', '合肥', '天津'], ['北京', '天津', '长沙'], ['北京', '南京', '济南'], ['北京', '合肥', '福州'], ['北京', '济南', '呼和浩特'], ['北京', '石家庄', '南京'], ['北京', '南京', '福州'], ['北京', '郑州', '合肥'], ['北京', '太原', '武汉'], ['北京', '合肥', '郑州'], ['北京', '郑州', '天津'], ['北京', '南京', '南昌'], ['北京', '合肥', '石家庄'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '石家庄', '西安'], ['北京', '合肥', '上海'], ['北京', '南京', '天津'], ['北京', '郑州', '广州'], ['北京', '郑州', '西安'], ['北京', '石家庄', '广州'], ['北京', '合肥', '长沙'], ['北京', '太原', '济南'], ['北京', '郑州', '澳门'], ['北京', '郑州', '香港'], ['北京', '太原', '天津'], ['北京', '郑州', '南京'], ['北京', '南京', '武汉'], ['北京', '合肥', '香港'], ['北京', '太原', '南昌'], ['北京', '合肥', '太原'], ['北京', '合肥', '广州'], ['北京', '合肥', '澳门'], ['北京', '南京', '石家庄'], ['北京', '太原', '合肥'], ['北京', '南京', '郑州'], ['北京', '太原', '广州'], ['北京', '太原', '澳门'], ['北京', '太原', '银川'], ['北京', '南京', '长沙']]\n",
      "distance 525.9770114869536\n",
      "distance 536.3862585152772\n",
      "distance 537.5738428960327\n",
      "distance 545.0686545796464\n",
      "distance 554.2116951438225\n",
      "distance 557.3489151909898\n",
      "distance 570.1697407996539\n",
      "distance 575.2242279701363\n",
      "distance 579.6438258013784\n",
      "distance 582.7581259728497\n",
      "distance 583.1854515460491\n",
      "distance 587.3945676549293\n",
      "distance 594.0391486127305\n",
      "distance 600.6904220941984\n",
      "distance 604.4656709669885\n",
      "distance 613.9202370976619\n",
      "distance 616.272157349062\n",
      "distance 629.9759221322245\n",
      "distance 631.1270655214053\n",
      "distance 634.9505592217768\n",
      "distance 648.8850292731822\n",
      "distance 655.9367799584197\n",
      "distance 659.3042359959665\n",
      "distance 663.9839950481226\n",
      "distance 665.1610201144756\n",
      "distance 665.2271362574077\n",
      "distance 665.2884529456433\n",
      "distance 668.7542525052928\n",
      "distance 669.1778706525284\n",
      "distance 674.4506713881102\n",
      "distance 692.6983232350499\n",
      "distance 706.7495651467713\n",
      "distance 706.8195308617029\n",
      "distance 713.281820755227\n",
      "distance 732.5085345714293\n",
      "distance 737.0482863704798\n",
      "distance 750.0316099790227\n",
      "distance 750.3270721178768\n",
      "distance 752.66259009181\n",
      "distance 769.1407184718995\n",
      "distance 772.4588406117207\n",
      "distance 778.7074595845996\n",
      "distance 783.8891243265533\n",
      "distance 784.4063058191027\n",
      "distance 784.4274218173812\n",
      "distance 784.8917046578065\n",
      "distance 791.5133577937027\n",
      "distance 793.4476756629472\n",
      "distance 798.6544016672909\n",
      "distance 801.1193521350156\n",
      "distance 807.4504228619811\n",
      "distance 821.1702083473804\n",
      "distance 827.0811069009287\n",
      "distance 840.2062474223444\n",
      "distance 841.7921027965002\n",
      "distance 844.8855544789926\n",
      "distance 845.3771204881372\n",
      "distance 865.516727418941\n",
      "distance 869.4266615234176\n",
      "distance 871.7370678343207\n",
      "distance 884.0150432656982\n",
      "distance 890.0182358486284\n",
      "distance 910.0135947873067\n",
      "distance 918.5411988407039\n",
      "distance 919.2125907610059\n",
      "distance 919.5128966166421\n",
      "distance 947.2924555017468\n",
      "distance 954.2089418546102\n",
      "distance 960.0048474851935\n",
      "distance 969.6217367181562\n",
      "distance 981.2836093051014\n",
      "distance 983.427782705923\n",
      "distance 990.2669894670754\n",
      "distance 1007.4720028115942\n",
      "distance 1011.4427449932836\n",
      "distance 1023.5287887397822\n",
      "distance 1033.7314234505639\n",
      "distance 1043.8691234181924\n",
      "distance 1043.8899456383463\n",
      "distance 1066.446551680398\n",
      "distance 1086.196901647063\n",
      "distance 1136.5215182708089\n",
      "distance 1143.4620734383043\n",
      "distance 1149.476528201452\n",
      "distance 852.3997751516072\n",
      "distance 712.3179167918761\n",
      "distance 927.025187704018\n",
      "distance 1009.8923350283042\n",
      "distance 842.6230656017364\n",
      "distance 1161.1409722161234\n",
      "distance 703.1193641716955\n",
      "distance 1104.694924559312\n",
      "distance 857.9753762158155\n",
      "distance 685.5941057063285\n",
      "distance 887.2253618785796\n",
      "distance 1122.4002959525435\n",
      "distance 1032.1179119472072\n",
      "distance 1042.2789407746475\n",
      "distance 883.4071947934851\n",
      "distance 892.1357271583363\n",
      "pathes [['北京', '石家庄', '济南'], ['北京', '呼和浩特'], ['北京', '天津', '郑州'], ['北京', '石家庄', '天津'], ['北京', '南昌'], ['北京', '济南', '郑州'], ['北京', '郑州', '石家庄'], ['北京', '石家庄', '呼和浩特'], ['北京', '郑州', '太原'], ['北京', '合肥', '南京'], ['北京', '石家庄', '武汉'], ['北京', '济南', '南昌'], ['北京', '济南', '武汉'], ['北京', '郑州', '武汉'], ['北京', '太原', '呼和浩特'], ['北京', '天津', '太原'], ['北京', '天津', '武汉'], ['北京', '天津', '南昌'], ['北京', '太原', '郑州'], ['北京', '合肥', '南昌'], ['北京', '南京', '合肥'], ['北京', '杭州'], ['北京', '合肥', '济南'], ['北京', '太原', '石家庄'], ['北京', '济南', '杭州'], ['北京', '长沙'], ['北京', '南京', '杭州'], ['北京', '石家庄', '合肥'], ['北京', '天津', '杭州'], ['北京', '济南', '太原'], ['北京', '武汉', '长沙'], ['北京', '郑州', '长沙'], ['北京', '武汉', '南昌'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '南昌'], ['北京', '武汉', '郑州'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '郑州', '呼和浩特'], ['北京', '合肥', '武汉'], ['北京', '合肥', '杭州'], ['北京', '济南', '上海'], ['北京', '济南', '长沙'], ['北京', '郑州', '南昌'], ['北京', '郑州', '济南'], ['北京', '济南', '福州'], ['北京', '南京', '上海'], ['北京', '合肥', '天津'], ['北京', '天津', '长沙'], ['北京', '南京', '济南'], ['北京', '合肥', '福州'], ['北京', '济南', '呼和浩特'], ['北京', '石家庄', '南京'], ['北京', '南京', '福州'], ['北京', '郑州', '合肥'], ['北京', '太原', '武汉'], ['北京', '合肥', '郑州'], ['北京', '郑州', '天津'], ['北京', '武汉', '合肥'], ['北京', '南京', '南昌'], ['北京', '合肥', '石家庄'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '石家庄', '西安'], ['北京', '武汉', '香港'], ['北京', '合肥', '上海'], ['北京', '武汉', '太原'], ['北京', '南京', '天津'], ['北京', '武汉', '澳门'], ['北京', '郑州', '广州'], ['北京', '郑州', '西安'], ['北京', '石家庄', '广州'], ['北京', '合肥', '长沙'], ['北京', '武汉', '济南'], ['北京', '太原', '济南'], ['北京', '郑州', '澳门'], ['北京', '郑州', '香港'], ['北京', '太原', '天津'], ['北京', '郑州', '南京'], ['北京', '南京', '武汉'], ['北京', '合肥', '香港'], ['北京', '太原', '南昌'], ['北京', '武汉', '南京'], ['北京', '合肥', '太原'], ['北京', '合肥', '广州'], ['北京', '武汉', '天津'], ['北京', '合肥', '澳门'], ['北京', '武汉', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '太原', '合肥'], ['北京', '南京', '郑州'], ['北京', '太原', '广州'], ['北京', '武汉', '福州'], ['北京', '武汉', '西安'], ['北京', '太原', '澳门'], ['北京', '太原', '银川'], ['北京', '南京', '长沙'], ['北京', '武汉', '杭州']]\n",
      "distance 537.5738428960327\n",
      "distance 545.0686545796464\n",
      "distance 554.2116951438225\n",
      "distance 557.3489151909898\n",
      "distance 570.1697407996539\n",
      "distance 575.2242279701363\n",
      "distance 579.6438258013784\n",
      "distance 582.7581259728497\n",
      "distance 583.1854515460491\n",
      "distance 587.3945676549293\n",
      "distance 594.0391486127305\n",
      "distance 600.6904220941984\n",
      "distance 604.4656709669885\n",
      "distance 613.9202370976619\n",
      "distance 616.272157349062\n",
      "distance 629.9759221322245\n",
      "distance 631.1270655214053\n",
      "distance 634.9505592217768\n",
      "distance 648.8850292731822\n",
      "distance 655.9367799584197\n",
      "distance 659.3042359959665\n",
      "distance 663.9839950481226\n",
      "distance 665.1610201144756\n",
      "distance 665.2271362574077\n",
      "distance 665.2884529456433\n",
      "distance 668.7542525052928\n",
      "distance 669.1778706525284\n",
      "distance 674.4506713881102\n",
      "distance 685.5941057063285\n",
      "distance 692.6983232350499\n",
      "distance 703.1193641716955\n",
      "distance 706.7495651467713\n",
      "distance 706.8195308617029\n",
      "distance 712.3179167918761\n",
      "distance 713.281820755227\n",
      "distance 732.5085345714293\n",
      "distance 737.0482863704798\n",
      "distance 750.0316099790227\n",
      "distance 750.3270721178768\n",
      "distance 752.66259009181\n",
      "distance 769.1407184718995\n",
      "distance 772.4588406117207\n",
      "distance 778.7074595845996\n",
      "distance 783.8891243265533\n",
      "distance 784.4063058191027\n",
      "distance 784.4274218173812\n",
      "distance 784.8917046578065\n",
      "distance 791.5133577937027\n",
      "distance 793.4476756629472\n",
      "distance 798.6544016672909\n",
      "distance 801.1193521350156\n",
      "distance 807.4504228619811\n",
      "distance 821.1702083473804\n",
      "distance 827.0811069009287\n",
      "distance 840.2062474223444\n",
      "distance 841.7921027965002\n",
      "distance 842.6230656017364\n",
      "distance 844.8855544789926\n",
      "distance 845.3771204881372\n",
      "distance 852.3997751516072\n",
      "distance 857.9753762158155\n",
      "distance 865.516727418941\n",
      "distance 869.4266615234176\n",
      "distance 871.7370678343207\n",
      "distance 883.4071947934851\n",
      "distance 884.0150432656982\n",
      "distance 887.2253618785796\n",
      "distance 890.0182358486284\n",
      "distance 892.1357271583363\n",
      "distance 910.0135947873067\n",
      "distance 918.5411988407039\n",
      "distance 919.2125907610059\n",
      "distance 919.5128966166421\n",
      "distance 927.025187704018\n",
      "distance 947.2924555017468\n",
      "distance 954.2089418546102\n",
      "distance 960.0048474851935\n",
      "distance 969.6217367181562\n",
      "distance 981.2836093051014\n",
      "distance 983.427782705923\n",
      "distance 990.2669894670754\n",
      "distance 1007.4720028115942\n",
      "distance 1009.8923350283042\n",
      "distance 1011.4427449932836\n",
      "distance 1023.5287887397822\n",
      "distance 1032.1179119472072\n",
      "distance 1033.7314234505639\n",
      "distance 1042.2789407746475\n",
      "distance 1043.8691234181924\n",
      "distance 1043.8899456383463\n",
      "distance 1066.446551680398\n",
      "distance 1086.196901647063\n",
      "distance 1104.694924559312\n",
      "distance 1122.4002959525435\n",
      "distance 1136.5215182708089\n",
      "distance 1143.4620734383043\n",
      "distance 1149.476528201452\n",
      "distance 1161.1409722161234\n",
      "distance 873.6425475046763\n",
      "distance 1071.4829367036293\n",
      "distance 877.8797769971394\n",
      "distance 1160.8444366875603\n",
      "distance 1088.6549063213604\n",
      "distance 693.8139218736213\n",
      "distance 928.3715292653138\n",
      "distance 1233.7956197406593\n",
      "distance 1158.3315712823542\n",
      "distance 1140.49293098178\n",
      "pathes [['北京', '天津', '郑州'], ['北京', '石家庄', '天津'], ['北京', '南昌'], ['北京', '济南', '郑州'], ['北京', '郑州', '石家庄'], ['北京', '石家庄', '呼和浩特'], ['北京', '郑州', '太原'], ['北京', '合肥', '南京'], ['北京', '石家庄', '武汉'], ['北京', '济南', '南昌'], ['北京', '济南', '武汉'], ['北京', '郑州', '武汉'], ['北京', '太原', '呼和浩特'], ['北京', '天津', '太原'], ['北京', '天津', '武汉'], ['北京', '天津', '南昌'], ['北京', '太原', '郑州'], ['北京', '合肥', '南昌'], ['北京', '南京', '合肥'], ['北京', '杭州'], ['北京', '合肥', '济南'], ['北京', '太原', '石家庄'], ['北京', '济南', '杭州'], ['北京', '长沙'], ['北京', '南京', '杭州'], ['北京', '石家庄', '合肥'], ['北京', '天津', '杭州'], ['北京', '济南', '太原'], ['北京', '武汉', '长沙'], ['北京', '郑州', '长沙'], ['北京', '呼和浩特', '太原'], ['北京', '武汉', '南昌'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '南昌'], ['北京', '武汉', '郑州'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '郑州', '呼和浩特'], ['北京', '合肥', '武汉'], ['北京', '合肥', '杭州'], ['北京', '济南', '上海'], ['北京', '济南', '长沙'], ['北京', '郑州', '南昌'], ['北京', '郑州', '济南'], ['北京', '济南', '福州'], ['北京', '南京', '上海'], ['北京', '合肥', '天津'], ['北京', '天津', '长沙'], ['北京', '南京', '济南'], ['北京', '合肥', '福州'], ['北京', '济南', '呼和浩特'], ['北京', '石家庄', '南京'], ['北京', '南京', '福州'], ['北京', '郑州', '合肥'], ['北京', '太原', '武汉'], ['北京', '合肥', '郑州'], ['北京', '郑州', '天津'], ['北京', '武汉', '合肥'], ['北京', '南京', '南昌'], ['北京', '合肥', '石家庄'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '石家庄', '西安'], ['北京', '呼和浩特', '石家庄'], ['北京', '呼和浩特', '郑州'], ['北京', '武汉', '香港'], ['北京', '合肥', '上海'], ['北京', '武汉', '太原'], ['北京', '南京', '天津'], ['北京', '武汉', '澳门'], ['北京', '郑州', '广州'], ['北京', '郑州', '西安'], ['北京', '石家庄', '广州'], ['北京', '合肥', '长沙'], ['北京', '武汉', '济南'], ['北京', '呼和浩特', '西安'], ['北京', '太原', '济南'], ['北京', '郑州', '澳门'], ['北京', '郑州', '香港'], ['北京', '太原', '天津'], ['北京', '郑州', '南京'], ['北京', '南京', '武汉'], ['北京', '合肥', '香港'], ['北京', '太原', '南昌'], ['北京', '武汉', '南京'], ['北京', '合肥', '太原'], ['北京', '合肥', '广州'], ['北京', '武汉', '天津'], ['北京', '合肥', '澳门'], ['北京', '武汉', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '太原', '合肥'], ['北京', '南京', '郑州'], ['北京', '呼和浩特', '武汉'], ['北京', '太原', '广州'], ['北京', '呼和浩特', '长沙'], ['北京', '武汉', '福州'], ['北京', '武汉', '西安'], ['北京', '太原', '澳门'], ['北京', '呼和浩特', '银川'], ['北京', '太原', '银川'], ['北京', '南京', '长沙'], ['北京', '呼和浩特', '天津'], ['北京', '呼和浩特', '济南'], ['北京', '武汉', '杭州'], ['北京', '呼和浩特', '重庆']]\n",
      "distance 557.3489151909898\n",
      "distance 570.1697407996539\n",
      "distance 575.2242279701363\n",
      "distance 579.6438258013784\n",
      "distance 582.7581259728497\n",
      "distance 583.1854515460491\n",
      "distance 587.3945676549293\n",
      "distance 594.0391486127305\n",
      "distance 600.6904220941984\n",
      "distance 604.4656709669885\n",
      "distance 613.9202370976619\n",
      "distance 616.272157349062\n",
      "distance 629.9759221322245\n",
      "distance 631.1270655214053\n",
      "distance 634.9505592217768\n",
      "distance 648.8850292731822\n",
      "distance 655.9367799584197\n",
      "distance 659.3042359959665\n",
      "distance 663.9839950481226\n",
      "distance 665.1610201144756\n",
      "distance 665.2271362574077\n",
      "distance 665.2884529456433\n",
      "distance 668.7542525052928\n",
      "distance 669.1778706525284\n",
      "distance 674.4506713881102\n",
      "distance 685.5941057063285\n",
      "distance 692.6983232350499\n",
      "distance 693.8139218736213\n",
      "distance 703.1193641716955\n",
      "distance 706.7495651467713\n",
      "distance 706.8195308617029\n",
      "distance 712.3179167918761\n",
      "distance 713.281820755227\n",
      "distance 732.5085345714293\n",
      "distance 737.0482863704798\n",
      "distance 750.0316099790227\n",
      "distance 750.3270721178768\n",
      "distance 752.66259009181\n",
      "distance 769.1407184718995\n",
      "distance 772.4588406117207\n",
      "distance 778.7074595845996\n",
      "distance 783.8891243265533\n",
      "distance 784.4063058191027\n",
      "distance 784.4274218173812\n",
      "distance 784.8917046578065\n",
      "distance 791.5133577937027\n",
      "distance 793.4476756629472\n",
      "distance 798.6544016672909\n",
      "distance 801.1193521350156\n",
      "distance 807.4504228619811\n",
      "distance 821.1702083473804\n",
      "distance 827.0811069009287\n",
      "distance 840.2062474223444\n",
      "distance 841.7921027965002\n",
      "distance 842.6230656017364\n",
      "distance 844.8855544789926\n",
      "distance 845.3771204881372\n",
      "distance 852.3997751516072\n",
      "distance 857.9753762158155\n",
      "distance 865.516727418941\n",
      "distance 869.4266615234176\n",
      "distance 871.7370678343207\n",
      "distance 873.6425475046763\n",
      "distance 877.8797769971394\n",
      "distance 883.4071947934851\n",
      "distance 884.0150432656982\n",
      "distance 887.2253618785796\n",
      "distance 890.0182358486284\n",
      "distance 892.1357271583363\n",
      "distance 910.0135947873067\n",
      "distance 918.5411988407039\n",
      "distance 919.2125907610059\n",
      "distance 919.5128966166421\n",
      "distance 927.025187704018\n",
      "distance 928.3715292653138\n",
      "distance 947.2924555017468\n",
      "distance 954.2089418546102\n",
      "distance 960.0048474851935\n",
      "distance 969.6217367181562\n",
      "distance 981.2836093051014\n",
      "distance 983.427782705923\n",
      "distance 990.2669894670754\n",
      "distance 1007.4720028115942\n",
      "distance 1009.8923350283042\n",
      "distance 1011.4427449932836\n",
      "distance 1023.5287887397822\n",
      "distance 1032.1179119472072\n",
      "distance 1033.7314234505639\n",
      "distance 1042.2789407746475\n",
      "distance 1043.8691234181924\n",
      "distance 1043.8899456383463\n",
      "distance 1066.446551680398\n",
      "distance 1071.4829367036293\n",
      "distance 1086.196901647063\n",
      "distance 1088.6549063213604\n",
      "distance 1104.694924559312\n",
      "distance 1122.4002959525435\n",
      "distance 1136.5215182708089\n",
      "distance 1140.49293098178\n",
      "distance 1143.4620734383043\n",
      "distance 1149.476528201452\n",
      "distance 1158.3315712823542\n",
      "distance 1160.8444366875603\n",
      "distance 1161.1409722161234\n",
      "distance 1233.7956197406593\n",
      "distance 1023.0632870247881\n",
      "distance 750.1487967292226\n",
      "distance 931.1157678669256\n",
      "distance 967.410039303744\n",
      "distance 918.379539358901\n",
      "distance 774.5714474020176\n",
      "distance 1039.3916827649596\n",
      "distance 956.2590529636668\n",
      "distance 944.5331705476185\n",
      "distance 876.289555819541\n",
      "distance 1114.6456903467724\n",
      "distance 1190.2750585214956\n",
      "distance 1092.8511092878969\n",
      "distance 910.6632602643941\n",
      "distance 953.0195578209892\n",
      "pathes [['北京', '济南', '郑州'], ['北京', '郑州', '石家庄'], ['北京', '石家庄', '呼和浩特'], ['北京', '郑州', '太原'], ['北京', '合肥', '南京'], ['北京', '石家庄', '武汉'], ['北京', '济南', '南昌'], ['北京', '济南', '武汉'], ['北京', '郑州', '武汉'], ['北京', '太原', '呼和浩特'], ['北京', '天津', '太原'], ['北京', '天津', '武汉'], ['北京', '天津', '南昌'], ['北京', '太原', '郑州'], ['北京', '合肥', '南昌'], ['北京', '南京', '合肥'], ['北京', '杭州'], ['北京', '合肥', '济南'], ['北京', '太原', '石家庄'], ['北京', '济南', '杭州'], ['北京', '长沙'], ['北京', '南京', '杭州'], ['北京', '石家庄', '合肥'], ['北京', '天津', '杭州'], ['北京', '济南', '太原'], ['北京', '武汉', '长沙'], ['北京', '郑州', '长沙'], ['北京', '呼和浩特', '太原'], ['北京', '武汉', '南昌'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '南昌'], ['北京', '武汉', '郑州'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '郑州', '呼和浩特'], ['北京', '合肥', '武汉'], ['北京', '南昌', '武汉'], ['北京', '合肥', '杭州'], ['北京', '济南', '上海'], ['北京', '济南', '长沙'], ['北京', '郑州', '南昌'], ['北京', '南昌', '合肥'], ['北京', '郑州', '济南'], ['北京', '济南', '福州'], ['北京', '南京', '上海'], ['北京', '合肥', '天津'], ['北京', '天津', '长沙'], ['北京', '南京', '济南'], ['北京', '合肥', '福州'], ['北京', '济南', '呼和浩特'], ['北京', '石家庄', '南京'], ['北京', '南京', '福州'], ['北京', '郑州', '合肥'], ['北京', '太原', '武汉'], ['北京', '合肥', '郑州'], ['北京', '郑州', '天津'], ['北京', '武汉', '合肥'], ['北京', '南京', '南昌'], ['北京', '合肥', '石家庄'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '石家庄', '西安'], ['北京', '呼和浩特', '石家庄'], ['北京', '南昌', '长沙'], ['北京', '呼和浩特', '郑州'], ['北京', '武汉', '香港'], ['北京', '合肥', '上海'], ['北京', '武汉', '太原'], ['北京', '南京', '天津'], ['北京', '武汉', '澳门'], ['北京', '郑州', '广州'], ['北京', '南昌', '香港'], ['北京', '南昌', '南京'], ['北京', '郑州', '西安'], ['北京', '石家庄', '广州'], ['北京', '合肥', '长沙'], ['北京', '武汉', '济南'], ['北京', '呼和浩特', '西安'], ['北京', '南昌', '郑州'], ['北京', '南昌', '广州'], ['北京', '太原', '济南'], ['北京', '南昌', '澳门'], ['北京', '郑州', '澳门'], ['北京', '南昌', '福州'], ['北京', '郑州', '香港'], ['北京', '南昌', '济南'], ['北京', '太原', '天津'], ['北京', '郑州', '南京'], ['北京', '南京', '武汉'], ['北京', '合肥', '香港'], ['北京', '太原', '南昌'], ['北京', '武汉', '南京'], ['北京', '合肥', '太原'], ['北京', '南昌', '石家庄'], ['北京', '合肥', '广州'], ['北京', '武汉', '天津'], ['北京', '合肥', '澳门'], ['北京', '南昌', '杭州'], ['北京', '武汉', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '太原', '合肥'], ['北京', '南京', '郑州'], ['北京', '呼和浩特', '武汉'], ['北京', '太原', '广州'], ['北京', '呼和浩特', '长沙'], ['北京', '南昌', '天津'], ['北京', '武汉', '福州'], ['北京', '南昌', '太原'], ['北京', '武汉', '西安'], ['北京', '太原', '澳门'], ['北京', '呼和浩特', '银川'], ['北京', '太原', '银川'], ['北京', '南京', '长沙'], ['北京', '呼和浩特', '天津'], ['北京', '呼和浩特', '济南'], ['北京', '武汉', '杭州'], ['北京', '南昌', '上海'], ['北京', '呼和浩特', '重庆']]\n",
      "distance 659.3042359959665\n",
      "distance 663.9839950481226\n",
      "distance 665.1610201144756\n",
      "distance 665.2271362574077\n",
      "distance 665.2884529456433\n",
      "distance 668.7542525052928\n",
      "distance 669.1778706525284\n",
      "distance 674.4506713881102\n",
      "distance 685.5941057063285\n",
      "distance 692.6983232350499\n",
      "distance 693.8139218736213\n",
      "distance 703.1193641716955\n",
      "distance 706.7495651467713\n",
      "distance 706.8195308617029\n",
      "distance 712.3179167918761\n",
      "distance 713.281820755227\n",
      "distance 732.5085345714293\n",
      "distance 737.0482863704798\n",
      "distance 750.0316099790227\n",
      "distance 750.1487967292226\n",
      "distance 750.3270721178768\n",
      "distance 752.66259009181\n",
      "distance 769.1407184718995\n",
      "distance 772.4588406117207\n",
      "distance 774.5714474020176\n",
      "distance 778.7074595845996\n",
      "distance 783.8891243265533\n",
      "distance 784.4063058191027\n",
      "distance 784.4274218173812\n",
      "distance 784.8917046578065\n",
      "distance 791.5133577937027\n",
      "distance 793.4476756629472\n",
      "distance 798.6544016672909\n",
      "distance 801.1193521350156\n",
      "distance 807.4504228619811\n",
      "distance 821.1702083473804\n",
      "distance 827.0811069009287\n",
      "distance 840.2062474223444\n",
      "distance 841.7921027965002\n",
      "distance 842.6230656017364\n",
      "distance 844.8855544789926\n",
      "distance 845.3771204881372\n",
      "distance 852.3997751516072\n",
      "distance 857.9753762158155\n",
      "distance 865.516727418941\n",
      "distance 869.4266615234176\n",
      "distance 871.7370678343207\n",
      "distance 873.6425475046763\n",
      "distance 876.289555819541\n",
      "distance 877.8797769971394\n",
      "distance 883.4071947934851\n",
      "distance 884.0150432656982\n",
      "distance 887.2253618785796\n",
      "distance 890.0182358486284\n",
      "distance 892.1357271583363\n",
      "distance 910.0135947873067\n",
      "distance 910.6632602643941\n",
      "distance 918.379539358901\n",
      "distance 918.5411988407039\n",
      "distance 919.2125907610059\n",
      "distance 919.5128966166421\n",
      "distance 927.025187704018\n",
      "distance 928.3715292653138\n",
      "distance 931.1157678669256\n",
      "distance 944.5331705476185\n",
      "distance 947.2924555017468\n",
      "distance 953.0195578209892\n",
      "distance 954.2089418546102\n",
      "distance 956.2590529636668\n",
      "distance 960.0048474851935\n",
      "distance 967.410039303744\n",
      "distance 969.6217367181562\n",
      "distance 981.2836093051014\n",
      "distance 983.427782705923\n",
      "distance 990.2669894670754\n",
      "distance 1007.4720028115942\n",
      "distance 1009.8923350283042\n",
      "distance 1011.4427449932836\n",
      "distance 1023.0632870247881\n",
      "distance 1023.5287887397822\n",
      "distance 1032.1179119472072\n",
      "distance 1033.7314234505639\n",
      "distance 1039.3916827649596\n",
      "distance 1042.2789407746475\n",
      "distance 1043.8691234181924\n",
      "distance 1043.8899456383463\n",
      "distance 1066.446551680398\n",
      "distance 1071.4829367036293\n",
      "distance 1086.196901647063\n",
      "distance 1088.6549063213604\n",
      "distance 1092.8511092878969\n",
      "distance 1104.694924559312\n",
      "distance 1114.6456903467724\n",
      "distance 1122.4002959525435\n",
      "distance 1136.5215182708089\n",
      "distance 1140.49293098178\n",
      "distance 1143.4620734383043\n",
      "distance 1149.476528201452\n",
      "distance 1158.3315712823542\n",
      "distance 1160.8444366875603\n",
      "distance 1161.1409722161234\n",
      "distance 1190.2750585214956\n",
      "distance 1233.7956197406593\n",
      "distance 1309.895489588248\n",
      "distance 1146.9015765778877\n",
      "distance 840.5075226401487\n",
      "distance 991.6730451127149\n",
      "distance 1141.1167675795568\n",
      "distance 906.8214848059806\n",
      "distance 809.4553496739966\n",
      "distance 1233.778142622798\n",
      "pathes [['北京', '合肥', '济南'], ['北京', '太原', '石家庄'], ['北京', '济南', '杭州'], ['北京', '长沙'], ['北京', '南京', '杭州'], ['北京', '石家庄', '合肥'], ['北京', '天津', '杭州'], ['北京', '济南', '太原'], ['北京', '武汉', '长沙'], ['北京', '郑州', '长沙'], ['北京', '呼和浩特', '太原'], ['北京', '武汉', '南昌'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '南昌'], ['北京', '武汉', '郑州'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '郑州', '呼和浩特'], ['北京', '合肥', '武汉'], ['北京', '南昌', '武汉'], ['北京', '合肥', '杭州'], ['北京', '济南', '上海'], ['北京', '济南', '长沙'], ['北京', '郑州', '南昌'], ['北京', '南昌', '合肥'], ['北京', '郑州', '济南'], ['北京', '济南', '福州'], ['北京', '南京', '上海'], ['北京', '合肥', '天津'], ['北京', '天津', '长沙'], ['北京', '南京', '济南'], ['北京', '合肥', '福州'], ['北京', '济南', '呼和浩特'], ['北京', '石家庄', '南京'], ['北京', '南京', '福州'], ['北京', '杭州', '上海'], ['北京', '郑州', '合肥'], ['北京', '太原', '武汉'], ['北京', '合肥', '郑州'], ['北京', '杭州', '南京'], ['北京', '郑州', '天津'], ['北京', '武汉', '合肥'], ['北京', '南京', '南昌'], ['北京', '合肥', '石家庄'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '石家庄', '西安'], ['北京', '呼和浩特', '石家庄'], ['北京', '南昌', '长沙'], ['北京', '呼和浩特', '郑州'], ['北京', '武汉', '香港'], ['北京', '合肥', '上海'], ['北京', '武汉', '太原'], ['北京', '南京', '天津'], ['北京', '武汉', '澳门'], ['北京', '杭州', '福州'], ['北京', '郑州', '广州'], ['北京', '南昌', '香港'], ['北京', '南昌', '南京'], ['北京', '郑州', '西安'], ['北京', '石家庄', '广州'], ['北京', '合肥', '长沙'], ['北京', '武汉', '济南'], ['北京', '呼和浩特', '西安'], ['北京', '南昌', '郑州'], ['北京', '南昌', '广州'], ['北京', '太原', '济南'], ['北京', '南昌', '澳门'], ['北京', '郑州', '澳门'], ['北京', '南昌', '福州'], ['北京', '郑州', '香港'], ['北京', '南昌', '济南'], ['北京', '太原', '天津'], ['北京', '郑州', '南京'], ['北京', '南京', '武汉'], ['北京', '合肥', '香港'], ['北京', '杭州', '合肥'], ['北京', '太原', '南昌'], ['北京', '武汉', '南京'], ['北京', '合肥', '太原'], ['北京', '南昌', '石家庄'], ['北京', '合肥', '广州'], ['北京', '武汉', '天津'], ['北京', '合肥', '澳门'], ['北京', '南昌', '杭州'], ['北京', '武汉', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '太原', '合肥'], ['北京', '南京', '郑州'], ['北京', '呼和浩特', '武汉'], ['北京', '太原', '广州'], ['北京', '呼和浩特', '长沙'], ['北京', '南昌', '天津'], ['北京', '武汉', '福州'], ['北京', '南昌', '太原'], ['北京', '武汉', '西安'], ['北京', '太原', '澳门'], ['北京', '呼和浩特', '银川'], ['北京', '杭州', '南昌'], ['北京', '太原', '银川'], ['北京', '杭州', '济南'], ['北京', '南京', '长沙'], ['北京', '呼和浩特', '天津'], ['北京', '呼和浩特', '济南'], ['北京', '武汉', '杭州'], ['北京', '南昌', '上海'], ['北京', '杭州', '天津'], ['北京', '呼和浩特', '重庆'], ['北京', '杭州', '武汉']]\n",
      "distance 665.2884529456433\n",
      "distance 668.7542525052928\n",
      "distance 669.1778706525284\n",
      "distance 674.4506713881102\n",
      "distance 685.5941057063285\n",
      "distance 692.6983232350499\n",
      "distance 693.8139218736213\n",
      "distance 703.1193641716955\n",
      "distance 706.7495651467713\n",
      "distance 706.8195308617029\n",
      "distance 712.3179167918761\n",
      "distance 713.281820755227\n",
      "distance 732.5085345714293\n",
      "distance 737.0482863704798\n",
      "distance 750.0316099790227\n",
      "distance 750.1487967292226\n",
      "distance 750.3270721178768\n",
      "distance 752.66259009181\n",
      "distance 769.1407184718995\n",
      "distance 772.4588406117207\n",
      "distance 774.5714474020176\n",
      "distance 778.7074595845996\n",
      "distance 783.8891243265533\n",
      "distance 784.4063058191027\n",
      "distance 784.4274218173812\n",
      "distance 784.8917046578065\n",
      "distance 791.5133577937027\n",
      "distance 793.4476756629472\n",
      "distance 798.6544016672909\n",
      "distance 801.1193521350156\n",
      "distance 807.4504228619811\n",
      "distance 809.4553496739966\n",
      "distance 821.1702083473804\n",
      "distance 827.0811069009287\n",
      "distance 840.2062474223444\n",
      "distance 840.5075226401487\n",
      "distance 841.7921027965002\n",
      "distance 842.6230656017364\n",
      "distance 844.8855544789926\n",
      "distance 845.3771204881372\n",
      "distance 852.3997751516072\n",
      "distance 857.9753762158155\n",
      "distance 865.516727418941\n",
      "distance 869.4266615234176\n",
      "distance 871.7370678343207\n",
      "distance 873.6425475046763\n",
      "distance 876.289555819541\n",
      "distance 877.8797769971394\n",
      "distance 883.4071947934851\n",
      "distance 884.0150432656982\n",
      "distance 887.2253618785796\n",
      "distance 890.0182358486284\n",
      "distance 892.1357271583363\n",
      "distance 906.8214848059806\n",
      "distance 910.0135947873067\n",
      "distance 910.6632602643941\n",
      "distance 918.379539358901\n",
      "distance 918.5411988407039\n",
      "distance 919.2125907610059\n",
      "distance 919.5128966166421\n",
      "distance 927.025187704018\n",
      "distance 928.3715292653138\n",
      "distance 931.1157678669256\n",
      "distance 944.5331705476185\n",
      "distance 947.2924555017468\n",
      "distance 953.0195578209892\n",
      "distance 954.2089418546102\n",
      "distance 956.2590529636668\n",
      "distance 960.0048474851935\n",
      "distance 967.410039303744\n",
      "distance 969.6217367181562\n",
      "distance 981.2836093051014\n",
      "distance 983.427782705923\n",
      "distance 990.2669894670754\n",
      "distance 991.6730451127149\n",
      "distance 1007.4720028115942\n",
      "distance 1009.8923350283042\n",
      "distance 1011.4427449932836\n",
      "distance 1023.0632870247881\n",
      "distance 1023.5287887397822\n",
      "distance 1032.1179119472072\n",
      "distance 1033.7314234505639\n",
      "distance 1039.3916827649596\n",
      "distance 1042.2789407746475\n",
      "distance 1043.8691234181924\n",
      "distance 1043.8899456383463\n",
      "distance 1066.446551680398\n",
      "distance 1071.4829367036293\n",
      "distance 1086.196901647063\n",
      "distance 1088.6549063213604\n",
      "distance 1092.8511092878969\n",
      "distance 1104.694924559312\n",
      "distance 1114.6456903467724\n",
      "distance 1122.4002959525435\n",
      "distance 1136.5215182708089\n",
      "distance 1140.49293098178\n",
      "distance 1141.1167675795568\n",
      "distance 1143.4620734383043\n",
      "distance 1146.9015765778877\n",
      "distance 1149.476528201452\n",
      "distance 1158.3315712823542\n",
      "distance 1160.8444366875603\n",
      "distance 1161.1409722161234\n",
      "distance 1190.2750585214956\n",
      "distance 1233.778142622798\n",
      "distance 1233.7956197406593\n",
      "distance 1309.895489588248\n",
      "distance 1134.0087624234416\n",
      "distance 843.6389793774409\n",
      "distance 962.37069160384\n",
      "distance 1260.1716312342994\n",
      "distance 1333.9859541949454\n",
      "distance 1170.1492259104682\n",
      "distance 987.3049969331262\n",
      "distance 887.0891659748593\n",
      "distance 1083.7058560677042\n",
      "distance 1175.542094270356\n",
      "distance 1358.782332927064\n",
      "distance 1217.4957840634909\n",
      "distance 1225.1248119577874\n",
      "distance 959.2291546646142\n",
      "distance 936.2953112687765\n",
      "pathes [['北京', '南京', '杭州'], ['北京', '石家庄', '合肥'], ['北京', '天津', '杭州'], ['北京', '济南', '太原'], ['北京', '武汉', '长沙'], ['北京', '郑州', '长沙'], ['北京', '呼和浩特', '太原'], ['北京', '武汉', '南昌'], ['北京', '石家庄', '长沙'], ['北京', '石家庄', '南昌'], ['北京', '武汉', '郑州'], ['北京', '天津', '呼和浩特'], ['北京', '天津', '上海'], ['北京', '郑州', '呼和浩特'], ['北京', '合肥', '武汉'], ['北京', '南昌', '武汉'], ['北京', '合肥', '杭州'], ['北京', '济南', '上海'], ['北京', '济南', '长沙'], ['北京', '郑州', '南昌'], ['北京', '南昌', '合肥'], ['北京', '郑州', '济南'], ['北京', '济南', '福州'], ['北京', '南京', '上海'], ['北京', '合肥', '天津'], ['北京', '天津', '长沙'], ['北京', '南京', '济南'], ['北京', '合肥', '福州'], ['北京', '济南', '呼和浩特'], ['北京', '石家庄', '南京'], ['北京', '南京', '福州'], ['北京', '杭州', '上海'], ['北京', '郑州', '合肥'], ['北京', '太原', '武汉'], ['北京', '合肥', '郑州'], ['北京', '杭州', '南京'], ['北京', '郑州', '天津'], ['北京', '武汉', '合肥'], ['北京', '长沙', '武汉'], ['北京', '南京', '南昌'], ['北京', '合肥', '石家庄'], ['北京', '武汉', '石家庄'], ['北京', '武汉', '广州'], ['北京', '太原', '长沙'], ['北京', '太原', '西安'], ['北京', '石家庄', '西安'], ['北京', '呼和浩特', '石家庄'], ['北京', '南昌', '长沙'], ['北京', '呼和浩特', '郑州'], ['北京', '武汉', '香港'], ['北京', '合肥', '上海'], ['北京', '长沙', '广州'], ['北京', '武汉', '太原'], ['北京', '南京', '天津'], ['北京', '武汉', '澳门'], ['北京', '杭州', '福州'], ['北京', '郑州', '广州'], ['北京', '南昌', '香港'], ['北京', '南昌', '南京'], ['北京', '郑州', '西安'], ['北京', '石家庄', '广州'], ['北京', '合肥', '长沙'], ['北京', '武汉', '济南'], ['北京', '呼和浩特', '西安'], ['北京', '南昌', '郑州'], ['北京', '长沙', '澳门'], ['北京', '南昌', '广州'], ['北京', '太原', '济南'], ['北京', '南昌', '澳门'], ['北京', '郑州', '澳门'], ['北京', '南昌', '福州'], ['北京', '长沙', '香港'], ['北京', '郑州', '香港'], ['北京', '长沙', '郑州'], ['北京', '南昌', '济南'], ['北京', '太原', '天津'], ['北京', '郑州', '南京'], ['北京', '南京', '武汉'], ['北京', '长沙', '南昌'], ['北京', '合肥', '香港'], ['北京', '杭州', '合肥'], ['北京', '太原', '南昌'], ['北京', '武汉', '南京'], ['北京', '合肥', '太原'], ['北京', '南昌', '石家庄'], ['北京', '合肥', '广州'], ['北京', '武汉', '天津'], ['北京', '合肥', '澳门'], ['北京', '南昌', '杭州'], ['北京', '武汉', '呼和浩特'], ['北京', '南京', '石家庄'], ['北京', '太原', '合肥'], ['北京', '南京', '郑州'], ['北京', '呼和浩特', '武汉'], ['北京', '长沙', '太原'], ['北京', '太原', '广州'], ['北京', '呼和浩特', '长沙'], ['北京', '南昌', '天津'], ['北京', '武汉', '福州'], ['北京', '南昌', '太原'], ['北京', '武汉', '西安'], ['北京', '长沙', '石家庄'], ['北京', '太原', '澳门'], ['北京', '呼和浩特', '银川'], ['北京', '杭州', '南昌'], ['北京', '太原', '银川'], ['北京', '杭州', '济南'], ['北京', '南京', '长沙'], ['北京', '呼和浩特', '天津'], ['北京', '呼和浩特', '济南'], ['北京', '武汉', '杭州'], ['北京', '长沙', '合肥'], ['北京', '长沙', '西安'], ['北京', '南昌', '上海'], ['北京', '长沙', '呼和浩特'], ['北京', '长沙', '南宁'], ['北京', '杭州', '天津'], ['北京', '呼和浩特', '重庆'], ['北京', '长沙', '济南'], ['北京', '杭州', '武汉'], ['北京', '长沙', '南京'], ['北京', '长沙', '天津']]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "['北京', '天津', '上海']"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "search_2(cities_connection,\"北京\",\"上海\",search_strategy=sort_by_distance)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# AI for NLP Lecture 1 Part 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Machine Learning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import load_boston\n",
    "import random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset = load_boston()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "#dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "x,y=dataset['data'],dataset['target']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [],
   "source": [
    "name = dataset[\"feature_names\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',\n",
       "       'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "name"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[6.3200e-03, 1.8000e+01, 2.3100e+00, ..., 1.5300e+01, 3.9690e+02,\n",
       "        4.9800e+00],\n",
       "       [2.7310e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9690e+02,\n",
       "        9.1400e+00],\n",
       "       [2.7290e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9283e+02,\n",
       "        4.0300e+00],\n",
       "       ...,\n",
       "       [6.0760e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,\n",
       "        5.6400e+00],\n",
       "       [1.0959e-01, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9345e+02,\n",
       "        6.4800e+00],\n",
       "       [4.7410e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,\n",
       "        7.8800e+00]])"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([24. , 21.6, 34.7, 33.4, 36.2, 28.7, 22.9, 27.1, 16.5, 18.9, 15. ,\n",
       "       18.9, 21.7, 20.4, 18.2, 19.9, 23.1, 17.5, 20.2, 18.2, 13.6, 19.6,\n",
       "       15.2, 14.5, 15.6, 13.9, 16.6, 14.8, 18.4, 21. , 12.7, 14.5, 13.2,\n",
       "       13.1, 13.5, 18.9, 20. , 21. , 24.7, 30.8, 34.9, 26.6, 25.3, 24.7,\n",
       "       21.2, 19.3, 20. , 16.6, 14.4, 19.4, 19.7, 20.5, 25. , 23.4, 18.9,\n",
       "       35.4, 24.7, 31.6, 23.3, 19.6, 18.7, 16. , 22.2, 25. , 33. , 23.5,\n",
       "       19.4, 22. , 17.4, 20.9, 24.2, 21.7, 22.8, 23.4, 24.1, 21.4, 20. ,\n",
       "       20.8, 21.2, 20.3, 28. , 23.9, 24.8, 22.9, 23.9, 26.6, 22.5, 22.2,\n",
       "       23.6, 28.7, 22.6, 22. , 22.9, 25. , 20.6, 28.4, 21.4, 38.7, 43.8,\n",
       "       33.2, 27.5, 26.5, 18.6, 19.3, 20.1, 19.5, 19.5, 20.4, 19.8, 19.4,\n",
       "       21.7, 22.8, 18.8, 18.7, 18.5, 18.3, 21.2, 19.2, 20.4, 19.3, 22. ,\n",
       "       20.3, 20.5, 17.3, 18.8, 21.4, 15.7, 16.2, 18. , 14.3, 19.2, 19.6,\n",
       "       23. , 18.4, 15.6, 18.1, 17.4, 17.1, 13.3, 17.8, 14. , 14.4, 13.4,\n",
       "       15.6, 11.8, 13.8, 15.6, 14.6, 17.8, 15.4, 21.5, 19.6, 15.3, 19.4,\n",
       "       17. , 15.6, 13.1, 41.3, 24.3, 23.3, 27. , 50. , 50. , 50. , 22.7,\n",
       "       25. , 50. , 23.8, 23.8, 22.3, 17.4, 19.1, 23.1, 23.6, 22.6, 29.4,\n",
       "       23.2, 24.6, 29.9, 37.2, 39.8, 36.2, 37.9, 32.5, 26.4, 29.6, 50. ,\n",
       "       32. , 29.8, 34.9, 37. , 30.5, 36.4, 31.1, 29.1, 50. , 33.3, 30.3,\n",
       "       34.6, 34.9, 32.9, 24.1, 42.3, 48.5, 50. , 22.6, 24.4, 22.5, 24.4,\n",
       "       20. , 21.7, 19.3, 22.4, 28.1, 23.7, 25. , 23.3, 28.7, 21.5, 23. ,\n",
       "       26.7, 21.7, 27.5, 30.1, 44.8, 50. , 37.6, 31.6, 46.7, 31.5, 24.3,\n",
       "       31.7, 41.7, 48.3, 29. , 24. , 25.1, 31.5, 23.7, 23.3, 22. , 20.1,\n",
       "       22.2, 23.7, 17.6, 18.5, 24.3, 20.5, 24.5, 26.2, 24.4, 24.8, 29.6,\n",
       "       42.8, 21.9, 20.9, 44. , 50. , 36. , 30.1, 33.8, 43.1, 48.8, 31. ,\n",
       "       36.5, 22.8, 30.7, 50. , 43.5, 20.7, 21.1, 25.2, 24.4, 35.2, 32.4,\n",
       "       32. , 33.2, 33.1, 29.1, 35.1, 45.4, 35.4, 46. , 50. , 32.2, 22. ,\n",
       "       20.1, 23.2, 22.3, 24.8, 28.5, 37.3, 27.9, 23.9, 21.7, 28.6, 27.1,\n",
       "       20.3, 22.5, 29. , 24.8, 22. , 26.4, 33.1, 36.1, 28.4, 33.4, 28.2,\n",
       "       22.8, 20.3, 16.1, 22.1, 19.4, 21.6, 23.8, 16.2, 17.8, 19.8, 23.1,\n",
       "       21. , 23.8, 23.1, 20.4, 18.5, 25. , 24.6, 23. , 22.2, 19.3, 22.6,\n",
       "       19.8, 17.1, 19.4, 22.2, 20.7, 21.1, 19.5, 18.5, 20.6, 19. , 18.7,\n",
       "       32.7, 16.5, 23.9, 31.2, 17.5, 17.2, 23.1, 24.5, 26.6, 22.9, 24.1,\n",
       "       18.6, 30.1, 18.2, 20.6, 17.8, 21.7, 22.7, 22.6, 25. , 19.9, 20.8,\n",
       "       16.8, 21.9, 27.5, 21.9, 23.1, 50. , 50. , 50. , 50. , 50. , 13.8,\n",
       "       13.8, 15. , 13.9, 13.3, 13.1, 10.2, 10.4, 10.9, 11.3, 12.3,  8.8,\n",
       "        7.2, 10.5,  7.4, 10.2, 11.5, 15.1, 23.2,  9.7, 13.8, 12.7, 13.1,\n",
       "       12.5,  8.5,  5. ,  6.3,  5.6,  7.2, 12.1,  8.3,  8.5,  5. , 11.9,\n",
       "       27.9, 17.2, 27.5, 15. , 17.2, 17.9, 16.3,  7. ,  7.2,  7.5, 10.4,\n",
       "        8.8,  8.4, 16.7, 14.2, 20.8, 13.4, 11.7,  8.3, 10.2, 10.9, 11. ,\n",
       "        9.5, 14.5, 14.1, 16.1, 14.3, 11.7, 13.4,  9.6,  8.7,  8.4, 12.8,\n",
       "       10.5, 17.1, 18.4, 15.4, 10.8, 11.8, 14.9, 12.6, 14.1, 13. , 13.4,\n",
       "       15.2, 16.1, 17.8, 14.9, 14.1, 12.7, 13.5, 14.9, 20. , 16.4, 17.7,\n",
       "       19.5, 20.2, 21.4, 19.9, 19. , 19.1, 19.1, 20.1, 19.9, 19.6, 23.2,\n",
       "       29.8, 13.8, 13.3, 16.7, 12. , 14.6, 21.4, 23. , 23.7, 25. , 21.8,\n",
       "       20.6, 21.2, 19.1, 20.6, 15.2,  7. ,  8.1, 13.6, 20.1, 21.8, 24.5,\n",
       "       23.1, 19.7, 18.3, 21.2, 17.5, 16.8, 22.4, 20.6, 23.9, 22. , 11.9])"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(506, 13)"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "样本数量： 506， 特征数：13个"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(506,)"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2.7310e-02, 0.0000e+00, 7.0700e+00, 0.0000e+00, 4.6900e-01,\n",
       "       6.4210e+00, 7.8900e+01, 4.9671e+00, 2.0000e+00, 2.4200e+02,\n",
       "       1.7800e+01, 3.9690e+02, 9.1400e+00])"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x[1].shape  # 属性值 \n",
    "x[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',\n",
       "       'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset.feature_names\n",
    "# CRIM     per capita crime rate by town\\n "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\".. _boston_dataset:\\n\\nBoston house prices dataset\\n---------------------------\\n\\n**Data Set Characteristics:**  \\n\\n    :Number of Instances: 506 \\n\\n    :Number of Attributes: 13 numeric/categorical predictive. Median Value (attribute 14) is usually the target.\\n\\n    :Attribute Information (in order):\\n        - CRIM     per capita crime rate by town\\n        - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.\\n        - INDUS    proportion of non-retail business acres per town\\n        - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\\n        - NOX      nitric oxides concentration (parts per 10 million)\\n        - RM       average number of rooms per dwelling\\n        - AGE      proportion of owner-occupied units built prior to 1940\\n        - DIS      weighted distances to five Boston employment centres\\n        - RAD      index of accessibility to radial highways\\n        - TAX      full-value property-tax rate per $10,000\\n        - PTRATIO  pupil-teacher ratio by town\\n        - B        1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town\\n        - LSTAT    % lower status of the population\\n        - MEDV     Median value of owner-occupied homes in $1000's\\n\\n    :Missing Attribute Values: None\\n\\n    :Creator: Harrison, D. and Rubinfeld, D.L.\\n\\nThis is a copy of UCI ML housing dataset.\\nhttps://archive.ics.uci.edu/ml/machine-learning-databases/housing/\\n\\n\\nThis dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.\\n\\nThe Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic\\nprices and the demand for clean air', J. Environ. Economics & Management,\\nvol.5, 81-102, 1978.   Used in Belsley, Kuh & Welsch, 'Regression diagnostics\\n...', Wiley, 1980.   N.B. Various transformations are used in the table on\\npages 244-261 of the latter.\\n\\nThe Boston house-price data has been used in many machine learning papers that address regression\\nproblems.   \\n     \\n.. topic:: References\\n\\n   - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.\\n   - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\\n\""
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset['DESCR']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[6.575 6.421 7.185 6.998 7.147 6.43  6.012 6.172 5.631 6.004 6.377 6.009\n",
      " 5.889 5.949 6.096 5.834 5.935 5.99  5.456 5.727 5.57  5.965 6.142 5.813\n",
      " 5.924 5.599 5.813 6.047 6.495 6.674 5.713 6.072 5.95  5.701 6.096 5.933\n",
      " 5.841 5.85  5.966 6.595 7.024 6.77  6.169 6.211 6.069 5.682 5.786 6.03\n",
      " 5.399 5.602 5.963 6.115 6.511 5.998 5.888 7.249 6.383 6.816 6.145 5.927\n",
      " 5.741 5.966 6.456 6.762 7.104 6.29  5.787 5.878 5.594 5.885 6.417 5.961\n",
      " 6.065 6.245 6.273 6.286 6.279 6.14  6.232 5.874 6.727 6.619 6.302 6.167\n",
      " 6.389 6.63  6.015 6.121 7.007 7.079 6.417 6.405 6.442 6.211 6.249 6.625\n",
      " 6.163 8.069 7.82  7.416 6.727 6.781 6.405 6.137 6.167 5.851 5.836 6.127\n",
      " 6.474 6.229 6.195 6.715 5.913 6.092 6.254 5.928 6.176 6.021 5.872 5.731\n",
      " 5.87  6.004 5.961 5.856 5.879 5.986 5.613 5.693 6.431 5.637 6.458 6.326\n",
      " 6.372 5.822 5.757 6.335 5.942 6.454 5.857 6.151 6.174 5.019 5.403 5.468\n",
      " 4.903 6.13  5.628 4.926 5.186 5.597 6.122 5.404 5.012 5.709 6.129 6.152\n",
      " 5.272 6.943 6.066 6.51  6.25  7.489 7.802 8.375 5.854 6.101 7.929 5.877\n",
      " 6.319 6.402 5.875 5.88  5.572 6.416 5.859 6.546 6.02  6.315 6.86  6.98\n",
      " 7.765 6.144 7.155 6.563 5.604 6.153 7.831 6.782 6.556 7.185 6.951 6.739\n",
      " 7.178 6.8   6.604 7.875 7.287 7.107 7.274 6.975 7.135 6.162 7.61  7.853\n",
      " 8.034 5.891 6.326 5.783 6.064 5.344 5.96  5.404 5.807 6.375 5.412 6.182\n",
      " 5.888 6.642 5.951 6.373 6.951 6.164 6.879 6.618 8.266 8.725 8.04  7.163\n",
      " 7.686 6.552 5.981 7.412 8.337 8.247 6.726 6.086 6.631 7.358 6.481 6.606\n",
      " 6.897 6.095 6.358 6.393 5.593 5.605 6.108 6.226 6.433 6.718 6.487 6.438\n",
      " 6.957 8.259 6.108 5.876 7.454 8.704 7.333 6.842 7.203 7.52  8.398 7.327\n",
      " 7.206 5.56  7.014 8.297 7.47  5.92  5.856 6.24  6.538 7.691 6.758 6.854\n",
      " 7.267 6.826 6.482 6.812 7.82  6.968 7.645 7.923 7.088 6.453 6.23  6.209\n",
      " 6.315 6.565 6.861 7.148 6.63  6.127 6.009 6.678 6.549 5.79  6.345 7.041\n",
      " 6.871 6.59  6.495 6.982 7.236 6.616 7.42  6.849 6.635 5.972 4.973 6.122\n",
      " 6.023 6.266 6.567 5.705 5.914 5.782 6.382 6.113 6.426 6.376 6.041 5.708\n",
      " 6.415 6.431 6.312 6.083 5.868 6.333 6.144 5.706 6.031 6.316 6.31  6.037\n",
      " 5.869 5.895 6.059 5.985 5.968 7.241 6.54  6.696 6.874 6.014 5.898 6.516\n",
      " 6.635 6.939 6.49  6.579 5.884 6.728 5.663 5.936 6.212 6.395 6.127 6.112\n",
      " 6.398 6.251 5.362 5.803 8.78  3.561 4.963 3.863 4.97  6.683 7.016 6.216\n",
      " 5.875 4.906 4.138 7.313 6.649 6.794 6.38  6.223 6.968 6.545 5.536 5.52\n",
      " 4.368 5.277 4.652 5.    4.88  5.39  5.713 6.051 5.036 6.193 5.887 6.471\n",
      " 6.405 5.747 5.453 5.852 5.987 6.343 6.404 5.349 5.531 5.683 4.138 5.608\n",
      " 5.617 6.852 5.757 6.657 4.628 5.155 4.519 6.434 6.782 5.304 5.957 6.824\n",
      " 6.411 6.006 5.648 6.103 5.565 5.896 5.837 6.202 6.193 6.38  6.348 6.833\n",
      " 6.425 6.436 6.208 6.629 6.461 6.152 5.935 5.627 5.818 6.406 6.219 6.485\n",
      " 5.854 6.459 6.341 6.251 6.185 6.417 6.749 6.655 6.297 7.393 6.728 6.525\n",
      " 5.976 5.936 6.301 6.081 6.701 6.376 6.317 6.513 6.209 5.759 5.952 6.003\n",
      " 5.926 5.713 6.167 6.229 6.437 6.98  5.427 6.162 6.484 5.304 6.185 6.229\n",
      " 6.242 6.75  7.061 5.762 5.871 6.312 6.114 5.905 5.454 5.414 5.093 5.983\n",
      " 5.983 5.707 5.926 5.67  5.39  5.794 6.019 5.569 6.027 6.593 6.12  6.976\n",
      " 6.794 6.03 ]\n"
     ]
    }
   ],
   "source": [
    "X_rm = x[:,5] # 为了方便，取用了前5个特征值\n",
    "print(X_rm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x1a19954e48>"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot the RM with respect to y\n",
    "plt.scatter(X_rm,y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Gradient descent"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Assume that the target funciton is a linear function\n",
    "$$ y = k*rm + b$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义目标函数\n",
    "def price(rm, k, b):\n",
    "    return k * rm + b"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define mean square loss\n",
    "- 平均平方误差"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ loss = \\frac{1}{n} \\sum{(y_i - \\hat{y_i})}^2$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ loss = \\frac{1}{n} \\sum{(y_i - (kx_i + b_i))}^2 $$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义损失函数\n",
    "def loss(y, y_hat):\n",
    "    return sum((y_i - y_hat_i)**2 for y_i, y_hat_i in zip(list(y),list(y_hat)))/len(list(y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define partial derivatives"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\frac{\\partial{loss}}{\\partial{k}} = -\\frac{2}{n}\\sum(y_i - \\hat{y_i})x_i$$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 求解关于k的偏导数\n",
    "def partial_derivative_k(x, y, y_hat):\n",
    "    n = len(y)\n",
    "    gradient = 0\n",
    "    for x_i, y_i, y_hat_i in zip(list(x), list(y), list(y_hat)):\n",
    "        gradient += (y_i-y_hat_i) * x_i\n",
    "    return -2/n * gradient"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$ \\frac{\\partial{loss}}{\\partial{b}} = -\\frac{2}{n}\\sum(y_i - \\hat{y_i})$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 求解关于b的偏导数\n",
    "def partial_derivative_b(y, y_hat):\n",
    "    n = len(y)\n",
    "    gradient = 0\n",
    "    for y_i, y_hat_i in zip(list(y), list(y_hat)):\n",
    "        gradient += (y_i-y_hat_i) \n",
    "    return -2/n * gradient"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [],
   "source": [
    "k = random.random()*200 - 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7.130262638904554"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iteration 0, the loss is 14528.115688691365, parameters k is -8.137327708440552 and b is -46.06881548960797\n",
      "Iteration 1, the loss is 12251.395591987797, parameters k is -6.6152738761804075 and b is -45.8293319869053\n",
      "Iteration 2, the loss is 10332.559147429782, parameters k is -5.217961985943083 and b is -45.609458554915285\n",
      "Iteration 3, the loss is 8715.349676362192, parameters k is -3.9351688614578215 and b is -45.40758805849973\n",
      "Iteration 4, the loss is 7352.353636368089, parameters k is -2.757509162796026 and b is -45.222245074640995\n",
      "Iteration 5, the loss is 6203.610545274132, parameters k is -1.676366721827314 and b is -45.0520750980276\n",
      "Iteration 6, the loss is 5235.441414881566, parameters k is -0.6838315050509458 and b is -44.895834631291706\n",
      "Iteration 7, the loss is 4419.461346300224, parameters k is 0.2273582573866847 and b is -44.75238208739731\n",
      "Iteration 8, the loss is 3731.7473380357737, parameters k is 1.063869199881222 and b is -44.62066943761953\n",
      "Iteration 9, the loss is 3152.1369085267697, parameters k is 1.831821595459926 and b is -44.49973454401051\n",
      "Iteration 10, the loss is 2663.6369700616706, parameters k is 2.536834132610151 and b is -44.38869412025491\n",
      "Iteration 11, the loss is 2251.9256233697265, parameters k is 3.1840650224406657 and b is -44.2867372694158\n",
      "Iteration 12, the loss is 1904.9322664388776, parameters k is 3.7782497369219388 and b is -44.193119551291936\n",
      "Iteration 13, the loss is 1612.483707140139, parameters k is 4.323735654303948 and b is -44.10715753598245\n",
      "Iteration 14, the loss is 1366.0059043453252, parameters k is 4.824513865182574 and b is -44.02822380381198\n",
      "Iteration 15, the loss is 1158.2725931480406, parameters k is 5.284248371912482 and b is -43.9557423550349\n",
      "Iteration 16, the loss is 983.1934243515873, parameters k is 5.706302894993735 and b is -43.88918439573547\n",
      "Iteration 17, the loss is 835.6354068716163, parameters k is 6.09376548255167 and b is -43.82806446909282\n",
      "Iteration 18, the loss is 711.2724180801722, parameters k is 6.449471102956641 and b is -43.77193690370662\n",
      "Iteration 19, the loss is 606.4583700171128, parameters k is 6.77602238587461 and b is -43.72039255299873\n",
      "Iteration 20, the loss is 518.1203129405228, parameters k is 7.075808663493182 and b is -43.67305580183598\n",
      "Iteration 21, the loss is 443.66834221300735, parameters k is 7.351023451231549 and b is -43.62958181847391\n",
      "Iteration 22, the loss is 380.9196671630081, parameters k is 7.603680495825804 and b is -43.58965403171642\n",
      "Iteration 23, the loss is 328.0346157628214, parameters k is 7.835628508199813 and b is -43.55298181483377\n",
      "Iteration 24, the loss is 283.46269890068214, parameters k is 8.048564688909511 and b is -43.519298359294176\n",
      "Iteration 25, the loss is 245.89715295269306, parameters k is 8.244047145114807 and b is -43.48835872275286\n",
      "Iteration 26, the loss is 214.23662792820843, parameters k is 8.42350628992349 and b is -43.4599380370174\n",
      "Iteration 27, the loss is 187.55289795705855, parameters k is 8.588255307506442 and b is -43.4338298628786\n",
      "Iteration 28, the loss is 165.0636474507672, parameters k is 8.739499760548506 and b is -43.40984467977045\n",
      "Iteration 29, the loss is 146.10953507912365, parameters k is 8.878346410324536 and b is -43.38780849920948\n",
      "Iteration 30, the loss is 130.13486312099428, parameters k is 9.005811313929623 and b is -43.36756159186913\n",
      "Iteration 31, the loss is 116.67128545104953, parameters k is 9.122827257904053 and b is -43.34895731897622\n",
      "Iteration 32, the loss is 105.32407651118751, parameters k is 9.230250582638472 and b is -43.331861059479834\n",
      "Iteration 33, the loss is 95.76055869868472, parameters k is 9.328867447487664 and b is -43.316149225143704\n",
      "Iteration 34, the loss is 87.70034888384055, parameters k is 9.419399582429396 and b is -43.30170835635625\n",
      "Iteration 35, the loss is 80.90713810332987, parameters k is 9.502509568348382 and b is -43.2884342920432\n",
      "Iteration 36, the loss is 75.18176342532065, parameters k is 9.578805684576649 and b is -43.27623140760966\n",
      "Iteration 37, the loss is 70.3563688664506, parameters k is 9.648846359155682 and b is -43.265011915336316\n",
      "Iteration 38, the loss is 66.28948416972382, parameters k is 9.713144254379095 and b is -43.25469522211147\n",
      "Iteration 39, the loss is 62.86187716233593, parameters k is 9.77217001750628 and b is -43.245207339799784\n",
      "Iteration 40, the loss is 59.973058092351636, parameters k is 9.826355724087815 and b is -43.2364803439341\n",
      "Iteration 41, the loss is 57.53833345795512, parameters k is 9.876098039094508 and b is -43.22845187676992\n",
      "Iteration 42, the loss is 55.48632295307763, parameters k is 9.921761118977367 and b is -43.22106469106686\n",
      "Iteration 43, the loss is 53.756866730916606, parameters k is 9.963679275890401 and b is -43.21426623125933\n",
      "Iteration 44, the loss is 52.299261630240764, parameters k is 10.002159423568102 and b is -43.2080082489522\n",
      "Iteration 45, the loss is 51.07077465395234, parameters k is 10.03748332275201 and b is -43.20224644992833\n",
      "Iteration 46, the loss is 50.03539011788817, parameters k is 10.069909642594238 and b is -43.196940170085526\n",
      "Iteration 47, the loss is 49.16275373861777, parameters k is 10.099675853119496 and b is -43.192052077931876\n",
      "Iteration 48, the loss is 48.427282702876056, parameters k is 10.126999962591137 and b is -43.187547901463034\n",
      "Iteration 49, the loss is 47.80741562753637, parameters k is 10.152082112492064 and b is -43.183396177423106\n",
      "Iteration 50, the loss is 47.28498042036254, parameters k is 10.175106041789604 and b is -43.17956802111481\n",
      "Iteration 51, the loss is 46.84466150840111, parameters k is 10.196240431197156 and b is -43.176036915074725\n",
      "Iteration 52, the loss is 46.47355081415396, parameters k is 10.215640137267386 and b is -43.17277851506757\n",
      "Iteration 53, the loss is 46.160769314994575, parameters k is 10.233447325345821 and b is -43.16977047198018\n",
      "Iteration 54, the loss is 45.89714809066177, parameters k is 10.249792509673684 and b is -43.16699226831204\n",
      "Iteration 55, the loss is 45.67495950774156, parameters k is 10.264795508249502 and b is -43.16442506806623\n",
      "Iteration 56, the loss is 45.48769065997264, parameters k is 10.278566319435425 and b is -43.16205157894243\n",
      "Iteration 57, the loss is 45.32985242206967, parameters k is 10.291205926721611 and b is -43.159855925823926\n",
      "Iteration 58, the loss is 45.196818518881294, parameters k is 10.302807037536477 and b is -43.15782353463284\n",
      "Iteration 59, the loss is 45.084689891693934, parameters k is 10.313454761508043 and b is -43.15594102570405\n",
      "Iteration 60, the loss is 44.9901803851544, parameters k is 10.323227233138637 and b is -43.15419611589756\n",
      "Iteration 61, the loss is 44.910520403368494, parameters k is 10.332196183448547 and b is -43.152577528733204\n",
      "Iteration 62, the loss is 44.84337571055213, parameters k is 10.340427464770846 and b is -43.15107491189025\n",
      "Iteration 63, the loss is 44.78677899562327, parameters k is 10.347981532536858 and b is -43.14967876146828\n",
      "Iteration 64, the loss is 44.7390721943367, parameters k is 10.354913887577093 and b is -43.14838035245525\n",
      "Iteration 65, the loss is 44.69885787795473, parameters k is 10.361275482173587 and b is -43.14717167489398\n",
      "Iteration 66, the loss is 44.66495828326244, parameters k is 10.367113092834382 and b is -43.14604537528016\n",
      "Iteration 67, the loss is 44.6363807827624, parameters k is 10.372469662517418 and b is -43.144994702762965\n",
      "Iteration 68, the loss is 44.61228878270097, parameters k is 10.377384614807609 and b is -43.14401345975486\n",
      "Iteration 69, the loss is 44.591977195711195, parameters k is 10.381894142345656 and b is -43.14309595658912\n",
      "Iteration 70, the loss is 44.57485176897602, parameters k is 10.3860314716188 and b is -43.14223696989338\n",
      "Iteration 71, the loss is 44.56041166185155, parameters k is 10.389827106050738 and b is -43.14143170437468\n",
      "Iteration 72, the loss is 44.54823476216065, parameters k is 10.393309049169224 and b is -43.14067575773636\n",
      "Iteration 73, the loss is 44.53796531065651, parameters k is 10.396503009484032 and b is -43.139965088470234\n",
      "Iteration 74, the loss is 44.529303470830186, parameters k is 10.399432588574257 and b is -43.13929598628829\n",
      "Iteration 75, the loss is 44.52199653826734, parameters k is 10.402119453760966 and b is -43.13866504497769\n",
      "Iteration 76, the loss is 44.51583153182927, parameters k is 10.40458349662855 and b is -43.13806913748041\n",
      "Iteration 77, the loss is 44.5106289494464, parameters k is 10.406842978554522 and b is -43.137505393015196\n",
      "Iteration 78, the loss is 44.50623750545453, parameters k is 10.408914664312466 and b is -43.13697117607453\n",
      "Iteration 79, the loss is 44.502529695183576, parameters k is 10.410813944725614 and b is -43.13646406714286\n",
      "Iteration 80, the loss is 44.49939805675997, parameters k is 10.412554949268412 and b is -43.135981844995044\n",
      "Iteration 81, the loss is 44.49675202052656, parameters k is 10.414150649439845 and b is -43.13552247044556\n",
      "Iteration 82, the loss is 44.49451525371025, parameters k is 10.415612953664862 and b is -43.13508407142951\n",
      "Iteration 83, the loss is 44.49262342248873, parameters k is 10.416952794418183 and b is -43.134664929306325\n",
      "Iteration 84, the loss is 44.49102230584335, parameters k is 10.418180208207913 and b is -43.13426346628593\n",
      "Iteration 85, the loss is 44.489666205901024, parameters k is 10.419304409004127 and b is -43.1338782338854\n",
      "Iteration 86, the loss is 44.48851660815827, parameters k is 10.420333855649648 and b is -43.13350790233163\n",
      "Iteration 87, the loss is 44.487541052308295, parameters k is 10.421276313746207 and b is -43.13315125083255\n",
      "Iteration 88, the loss is 44.4867121805658, parameters k is 10.422138912468725 and b is -43.13280715864559\n",
      "Iteration 89, the loss is 44.48600693558839, parameters k is 10.422928196723436 and b is -43.1324745968782\n",
      "Iteration 90, the loss is 44.48540588447808, parameters k is 10.423650175031383 and b is -43.13215262096027\n",
      "Iteration 91, the loss is 44.48489264904566, parameters k is 10.42431036348766 and b is -43.13184036373358\n",
      "Iteration 92, the loss is 44.4844534256328, parameters k is 10.424913826117978 and b is -43.1315370291075\n",
      "Iteration 93, the loss is 44.484076580414786, parameters k is 10.425465211927838 and b is -43.13124188623466\n",
      "Iteration 94, the loss is 44.483752308318536, parameters k is 10.425968788915343 and b is -43.13095426416401\n",
      "Iteration 95, the loss is 44.48347234555651, parameters k is 10.42642847529651 and b is -43.13067354693201\n",
      "Iteration 96, the loss is 44.48322972734744, parameters k is 10.426847868171517 and b is -43.13039916905615\n",
      "Iteration 97, the loss is 44.483018583722824, parameters k is 10.427230269841631 and b is -43.1301306113978\n",
      "Iteration 98, the loss is 44.482833967429826, parameters k is 10.427578711969328 and b is -43.12986739736415\n",
      "Iteration 99, the loss is 44.48267170888737, parameters k is 10.427895977758395 and b is -43.12960908942132\n",
      "Iteration 100, the loss is 44.48252829394199, parameters k is 10.428184622316255 and b is -43.129355285893354\n",
      "Iteration 101, the loss is 44.48240076083913, parameters k is 10.42844699134752 and b is -43.129105618023466\n",
      "Iteration 102, the loss is 44.482286613390265, parameters k is 10.428685238315513 and b is -43.128859747276195\n",
      "Iteration 103, the loss is 44.48218374778951, parameters k is 10.428901340197324 and b is -43.128617362860595\n",
      "Iteration 104, the loss is 44.48209039093361, parameters k is 10.429097111947673 and b is -43.12837817945646\n",
      "Iteration 105, the loss is 44.482005048438154, parameters k is 10.429274219777383 and b is -43.128141935126884\n",
      "Iteration 106, the loss is 44.48192646082489, parameters k is 10.429434193343637 and b is -43.127908389401874\n",
      "Iteration 107, the loss is 44.48185356659637, parameters k is 10.429578436941165 and b is -43.127677321519066\n",
      "Iteration 108, the loss is 44.48178547111473, parameters k is 10.429708239776284 and b is -43.12744852880857\n",
      "Iteration 109, the loss is 44.48172142037238, parameters k is 10.429824785398916 and b is -43.12722182521022\n",
      "Iteration 110, the loss is 44.48166077888654, parameters k is 10.42992916036162 and b is -43.126997039912325\n",
      "Iteration 111, the loss is 44.481603011067236, parameters k is 10.430022362168971 and b is -43.12677401610198\n",
      "Iteration 112, the loss is 44.4815476655155, parameters k is 10.430105306575452 and b is -43.12655260981783\n",
      "Iteration 113, the loss is 44.48149436178898, parameters k is 10.43017883428525 and b is -43.12633268889678\n",
      "Iteration 114, the loss is 44.481442779247885, parameters k is 10.430243717102975 and b is -43.126114132007125\n",
      "Iteration 115, the loss is 44.48139264765478, parameters k is 10.430300663580292 and b is -43.12589682776082\n",
      "Iteration 116, the loss is 44.481343739251486, parameters k is 10.4303503241998 and b is -43.125680673898586\n",
      "Iteration 117, the loss is 44.48129586208167, parameters k is 10.43039329613405 and b is -43.12546557654175\n",
      "Iteration 118, the loss is 44.481248854363294, parameters k is 10.430430127614553 and b is -43.12525144950542\n",
      "Iteration 119, the loss is 44.48120257974498, parameters k is 10.430461321942728 and b is -43.12503821366794\n",
      "Iteration 120, the loss is 44.481156923308994, parameters k is 10.430487341172118 and b is -43.12482579639203\n",
      "Iteration 121, the loss is 44.48111178820169, parameters k is 10.430508609488855 and b is -43.12461413099336\n",
      "Iteration 122, the loss is 44.48106709279409, parameters k is 10.430525516315063 and b is -43.124403156252676\n",
      "Iteration 123, the loss is 44.481022768288746, parameters k is 10.430538419157928 and b is -43.124192815967916\n",
      "Iteration 124, the loss is 44.48097875670267, parameters k is 10.430547646225277 and b is -43.123983058543025\n",
      "Iteration 125, the loss is 44.48093500916724, parameters k is 10.430553498826791 and b is -43.123773836610475\n",
      "Iteration 126, the loss is 44.48089148449563, parameters k is 10.43055625357844 and b is -43.12356510668471\n",
      "Iteration 127, the loss is 44.48084814797532, parameters k is 10.430556164426234 and b is -43.12335682884401\n",
      "Iteration 128, the loss is 44.48080497035035, parameters k is 10.430553464504142 and b is -43.123148966438414\n",
      "Iteration 129, the loss is 44.48076192696343, parameters k is 10.430548367839727 and b is -43.122941485821585\n",
      "Iteration 130, the loss is 44.48071899703346, parameters k is 10.43054107092001 and b is -43.122734356104644\n",
      "Iteration 131, the loss is 44.48067616304567, parameters k is 10.43053175412899 and b is -43.122527548930194\n",
      "Iteration 132, the loss is 44.480633410238546, parameters k is 10.430520583067372 and b is -43.122321038264836\n",
      "Iteration 133, the loss is 44.48059072617113, parameters k is 10.430507709764113 and b is -43.122114800208735\n",
      "Iteration 134, the loss is 44.48054810035785, parameters k is 10.4304932737887 and b is -43.12190881282074\n",
      "Iteration 135, the loss is 44.48050552396153, parameters k is 10.430477403272258 and b is -43.121703055957866\n",
      "Iteration 136, the loss is 44.48046298953407, parameters k is 10.430460215844972 and b is -43.12149751112793\n",
      "Iteration 137, the loss is 44.480420490798046, parameters k is 10.430441819496691 and b is -43.121292161354255\n",
      "Iteration 138, the loss is 44.480378022462986, parameters k is 10.430422313366996 and b is -43.121086991051484\n",
      "Iteration 139, the loss is 44.480335580069784, parameters k is 10.430401788470526 and b is -43.12088198591154\n",
      "Iteration 140, the loss is 44.48029315986055, parameters k is 10.430380328362846 and b is -43.12067713279893\n",
      "Iteration 141, the loss is 44.48025075866775, parameters k is 10.430358009751759 and b is -43.12047241965469\n",
      "Iteration 142, the loss is 44.48020837382211, parameters k is 10.430334903058506 and b is -43.12026783540811\n",
      "Iteration 143, the loss is 44.48016600307353, parameters k is 10.430311072932986 and b is -43.12006336989578\n",
      "Iteration 144, the loss is 44.480123644525975, parameters k is 10.430286578726735 and b is -43.11985901378723\n",
      "Iteration 145, the loss is 44.48008129658122, parameters k is 10.430261474927159 and b is -43.11965475851663\n",
      "Iteration 146, the loss is 44.48003895789229, parameters k is 10.430235811556168 and b is -43.11945059622017\n",
      "Iteration 147, the loss is 44.4799966273239, parameters k is 10.430209634536144 and b is -43.1192465196785\n",
      "Iteration 148, the loss is 44.479954303919335, parameters k is 10.430182986025919 and b is -43.1190425222639\n",
      "Iteration 149, the loss is 44.47991198687213, parameters k is 10.430155904729212 and b is -43.11883859789185\n",
      "Iteration 150, the loss is 44.47986967550261, parameters k is 10.430128426177792 and b is -43.11863474097645\n",
      "Iteration 151, the loss is 44.479827369237945, parameters k is 10.430100582991434 and b is -43.11843094638958\n",
      "Iteration 152, the loss is 44.47978506759534, parameters k is 10.430072405116574 and b is -43.11822720942339\n",
      "Iteration 153, the loss is 44.479742770167746, parameters k is 10.430043920045396 and b is -43.11802352575585\n",
      "Iteration 154, the loss is 44.47970047661234, parameters k is 10.430015153016969 and b is -43.11781989141913\n",
      "Iteration 155, the loss is 44.47965818663995, parameters k is 10.429986127201907 and b is -43.11761630277057\n",
      "Iteration 156, the loss is 44.479615900006856, parameters k is 10.429956863871883 and b is -43.11741275646604\n",
      "Iteration 157, the loss is 44.479573616507814, parameters k is 10.429927382555256 and b is -43.117209249435454\n",
      "Iteration 158, the loss is 44.479531335969675, parameters k is 10.429897701179945 and b is -43.11700577886034\n",
      "Iteration 159, the loss is 44.47948905824647, parameters k is 10.42986783620459 and b is -43.11680234215319\n",
      "Iteration 160, the loss is 44.479446783215316, parameters k is 10.429837802738971 and b is -43.11659893693856\n",
      "Iteration 161, the loss is 44.47940451077241, parameters k is 10.429807614654552 and b is -43.11639556103565\n",
      "Iteration 162, the loss is 44.47936224083051, parameters k is 10.42977728468596 and b is -43.1161922124424\n",
      "Iteration 163, the loss is 44.47931997331584, parameters k is 10.429746824524162 and b is -43.11598888932081\n",
      "Iteration 164, the loss is 44.47927770816629, parameters k is 10.429716244901996 and b is -43.1157855899835\n",
      "Iteration 165, the loss is 44.4792354453296, parameters k is 10.429685555672691 and b is -43.11558231288138\n",
      "Iteration 166, the loss is 44.47919318476151, parameters k is 10.429654765881958 and b is -43.11537905659229\n",
      "Iteration 167, the loss is 44.47915092642486, parameters k is 10.42962388383417 and b is -43.115175819810624\n",
      "Iteration 168, the loss is 44.47910867028837, parameters k is 10.429592917153114 and b is -43.11497260133776\n",
      "Iteration 169, the loss is 44.47906641632538, parameters k is 10.429561872837775 and b is -43.11476940007331\n",
      "Iteration 170, the loss is 44.47902416451371, parameters k is 10.429530757313533 and b is -43.11456621500704\n",
      "Iteration 171, the loss is 44.47898191483446, parameters k is 10.42949957647918 and b is -43.11436304521151\n",
      "Iteration 172, the loss is 44.47893966727179, parameters k is 10.429468335750073 and b is -43.11415988983529\n",
      "Iteration 173, the loss is 44.478897421812256, parameters k is 10.429437040097753 and b is -43.113956748096705\n",
      "Iteration 174, the loss is 44.47885517844457, parameters k is 10.42940569408632 and b is -43.11375361927813\n",
      "Iteration 175, the loss is 44.47881293715919, parameters k is 10.429374301905822 and b is -43.11355050272075\n",
      "Iteration 176, the loss is 44.47877069794804, parameters k is 10.429342867402914 and b is -43.11334739781972\n",
      "Iteration 177, the loss is 44.478728460804405, parameters k is 10.429311394108996 and b is -43.113144304019784\n",
      "Iteration 178, the loss is 44.47868622572234, parameters k is 10.429279885266054 and b is -43.11294122081116\n",
      "Iteration 179, the loss is 44.47864399269706, parameters k is 10.429248343850375 and b is -43.112738147725835\n",
      "Iteration 180, the loss is 44.47860176172455, parameters k is 10.429216772594325 and b is -43.11253508433415\n",
      "Iteration 181, the loss is 44.47855953280123, parameters k is 10.429185174006339 and b is -43.112332030241646\n",
      "Iteration 182, the loss is 44.47851730592413, parameters k is 10.429153550389271 and b is -43.11212898508618\n",
      "Iteration 183, the loss is 44.478475081090785, parameters k is 10.429121903857249 and b is -43.11192594853528\n",
      "Iteration 184, the loss is 44.47843285829909, parameters k is 10.42909023635113 and b is -43.11172292028372\n",
      "Iteration 185, the loss is 44.478390637547136, parameters k is 10.42905854965271 and b is -43.11151990005126\n",
      "Iteration 186, the loss is 44.4783484188336, parameters k is 10.42902684539776 and b is -43.11131688758064\n",
      "Iteration 187, the loss is 44.478306202156915, parameters k is 10.428995125087985 and b is -43.111113882635664\n",
      "Iteration 188, the loss is 44.47826398751619, parameters k is 10.428963390102023 and b is -43.11091088499948\n",
      "Iteration 189, the loss is 44.478221774910224, parameters k is 10.428931641705521 and b is -43.110707894472995\n",
      "Iteration 190, the loss is 44.478179564338376, parameters k is 10.4288998810604 and b is -43.11050491087344\n",
      "Iteration 191, the loss is 44.47813735579988, parameters k is 10.428868109233353 and b is -43.11030193403299\n",
      "Iteration 192, the loss is 44.47809514929413, parameters k is 10.428836327203653 and b is -43.11009896379759\n",
      "Iteration 193, the loss is 44.47805294482057, parameters k is 10.428804535870315 and b is -43.10989600002579\n",
      "Iteration 194, the loss is 44.47801074237885, parameters k is 10.428772736058674 and b is -43.10969304258772\n",
      "Iteration 195, the loss is 44.477968541968316, parameters k is 10.428740928526423 and b is -43.109490091364144\n",
      "Iteration 196, the loss is 44.47792634358885, parameters k is 10.428709113969159 and b is -43.10928714624559\n",
      "Iteration 197, the loss is 44.47788414723997, parameters k is 10.42867729302547 and b is -43.10908420713156\n",
      "Iteration 198, the loss is 44.47784195292151, parameters k is 10.428645466281603 and b is -43.10888127392976\n",
      "Iteration 199, the loss is 44.47779976063319, parameters k is 10.428613634275763 and b is -43.108678346555465\n"
     ]
    }
   ],
   "source": [
    "# 参数初始化\n",
    "k = random.random() * 200 - 100 \n",
    "b = random.random() * 200 - 100\n",
    "learning_rate = 1e-3\n",
    "iteration_num = 200\n",
    "losses = []\n",
    "for i in range(iteration_num):\n",
    "    price_use_current_parameters = [price(r, k, b) for r in X_rm]\n",
    "    current_loss = loss(y, price_use_current_parameters)\n",
    "    losses.append(current_loss)\n",
    "    print(\"Iteration {}, the loss is {}, parameters k is {} and b is {}\".format(i, current_loss, k, b))\n",
    "    k_gradient = partial_derivative_k(X_rm, y, price_use_current_parameters)\n",
    "    b_gradient = partial_derivative_b(y, price_use_current_parameters)\n",
    "    k = k + (-1 * k_gradient) * learning_rate\n",
    "    b = b + (-1 * b_gradient) * learning_rate\n",
    "best_k = k\n",
    "best_b = b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a1a042ef0>]"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(list(range(iteration_num)), losses)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x1a19eae828>"
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD8CAYAAABn919SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJztnXuYVPWZ5z9vVRdYaEJDQrLagKCbB2fxQkuPYYYkz3iJTMbYdjSClxlMxg2Z0dlEcVCc5NHGJxcSNmrybEyGiUaZUUN7axE2wXhJVtzVEWwBGeGJwYgWjjKBJqO0UHT/9o+q09TlXKvOqapT9X6eh6e7T58653eq6O95z3sVYwyKoihK/EnUewGKoihKOKigK4qiNAkq6IqiKE2CCrqiKEqToIKuKIrSJKigK4qiNAkq6IqiKE2CCrqiKEqToIKuKIrSJLTV8mQf/vCHzbRp02p5SkVRlNizadOm/zDGTPLar6aCPm3aNDZu3FjLUyqKosQeEXndz37qclEURWkSVNAVRVGaBBV0RVGUJkEFXVEUpUlQQVcURWkSfGW5iMjvgP8EhoHDxpguEZkIrAamAb8D5htj9kWzTCUs+gcyrFi/g92DQxzXnmbJvBn0dHbUe1kVEfa11PK9CfNccVx3/0CG3jXbGBzKAjAulWBsKsm+A1kSAiP5uTvt6RS93TPp6eyo6tylrz3zpEk8vX1PaO//sse2se9AtmzNtUb8TCzKC3qXMeY/CrZ9F9hrjFkuIkuBCcaYG9yO09XVZTRtsX70D2S48eGtDGWHR7elU0m+feEpsRP1sK+llu9NmOeK47r7BzIseWAz2RF/09JSCWHBGVN4aFOmonPbrbuUat7/JQ9uJjtcfC2phLDi4tNC+wxEZJMxpstrv2pcLhcA9+S/vwfoqeJYSg1YsX5H2X/qoewwK9bvqNOKKifsa6nlexPmueK47hXrd/gWc4DsiOH+59+o+Nx26y6lmve/VMwht+Z6/F35FXQDPC4im0RkUX7bR40xbwHkv37E7oUiskhENorIxj179lS/YqVidg8OBdreyIR9LbV8b8I8VxzXXcnahh08CX6O5fd8Yb7/lR6vWvwK+lxjzOnAZ4CrReRTfk9gjFlpjOkyxnRNmuRZuapEyHHt6UDbG5mwr6WW702Y54rjuitZW1Kk4mP5PV9ChP6BTKB1uR27Hn9XvgTdGLM7//Ud4BHgDOBtETkWIP/1nagWqYTDknkzSKeSRdvSqSRL5s2o04oqJ+xrqeV7E+a54rjuJfNmkErYC7QdqYRw6cenVHxuu3XbMWwMNz68NZCoL5k3g1Sy/FpSCanL35WnoIvI0SLyAet74FzgZWANcEV+tyuAR6NapBIOPZ0dfPvCU+hoTyNAR3s6lgFRCP9aavnehHmuOK67p7ODFRefRns6VbTd0vhCrW9Pp1hx8Wl8o+eUwOfuH8gwd/lTXLv6Jca2JZgwLjX62r+cM9XW6g/qS+/p7GDF509jwrgj13LpUc+xefxieh6dCbedDFv6fB+vWjyzXETkBHJWOeTSHO8zxnxTRD4E9AFTgV3AxcaYvW7H0iwXRVEsoszQ8XPs6UvXYad+Ary2/LzKTrylDx77CmQL/OepNJz/Azh1fmXHxH+Wi2ceujFmJ3CazfbfA2dXtjxFUVodt6yZagXdz7GPa0+TsQlcBvZ9b+mDn98AQw72bHYInrylKkH3i1aKKopSF6LM0PFz7FBiAlv64NGrncXcYv+b/o9ZBSroiqLUhSgzdPwcO5SYwJO3wPAh7/3GT/Z/zCqo6YALRVEUiyXzZtj6ucPIDvF77J7OjurcO34s71Qazr6p8nMEQAVdUZRI8Oq9Yn0fRR+aKI9dxPjJsP8Nl99PyYl5Dfzn4LOXS1holouitAbN1DfIFcuHXup2SaSg547QhLwWvVwURVHK6B/IcF3f5qbpG+TKqfPhgh9CeuKRbemJoYp5ENTloihKaFiWeTW9V2LHqfPrIt52qKArihIaXp0NC7NMmqk3f6Oggq4oSmi4WeCFWSalPvbM4BA3PrwVQEW9CtSHrihKaDjlfydFigKiterjbvVzmb50HXOXPxW4m2LcUEFXFCU0nKovvze/eHpPLfq4W08BmcEhDEeeAppZ1NXloihKaPjN/w6tj4oLrv1cks/mqjz3vwGSBDNc85zxKFBBVxTFkyABTD/Vl1FWiVo4Wftdf/glPPbTIx0RTX4N+9/IdUqE2Iq6ulwURXElCtdFT2cHF83uGO1JnhThotlVluGXYGftdyc28L0xPy5ub1uI1RkxpqigK4riipPronfNtoqP2T+Q4aFNmdF89WFjeGhTJlT/dqE/vzuxgRfHLuL7qTtoY8T9hTXqjBgFKuiKorji5LoYHMoya9njFYlwLbJcejo7WPXHr/PSUV/m+6k7mCjv4jCatJgadUaMAhV0RVFccQtUDg5lK3K/1CLLhbWL6Xrxetr5T39CDjXtjBgFKuiKorjiFaisxLKOshc6AFv6MBvvxP8oanJZLlWOiqs3KuiKorjS09lRNATZjt2DQ4GKeEKZFuTGk7f4E/NUGi78J+jdD9e+HGsxBxV0RVF8cPP5M8sEuJD2calAmTChTAtyw09gMz0x9hZ5KZqHriiKJ5bQLntsG/sOZIt+l04lMYbAA5+rnhbkhsvgiWEjLM7+LRuP+jRLhmfQE80K6oJa6Iqi+KKns4OBm87l9gWzyizr/UNZ29fUrV3u2TcxLOX26mGT4Nrs3/LoyCeashWAWuiKEiMaoeWsnWW9Yv2OyEv5A3HqfJLAwcf+njHZ/WBgH8fQm13ImpFPjO7m9RQRN1TQFSUmNHLL2VqU8o+ypS/fh+XNnGvFqf/KqfMZW7B99tJ12I3daKahGyroihITXJtN1VnQazKUee1i2PRTMAWVngH6r9SiIVi9UUFXlJhQk2KcKog0yLl2MWy80/53Vv8VD0Gv6VNEnfAdFBWRpIgMiMja/M/TReR5EfmNiKwWkTHRLVNRlMiLcRqZTXe7/95HmmLkqZINQBAL/avAK8AH8z9/B7jNGPMzEfkxcCXwo5DXpyhKnrhbmFUFdI3znFLAd/+VSJ8iGgBfgi4ik4HzgG8Ci0VEgLOAy/K73AP0ooKuKJFREz91RPgO6G7pg5/fAEN7cz+nJ8JnvnNkCIUdMe+/EiZ+LfTbgeuBD+R//hAwaIw5nP/5TcD2f5WILAIWAUydOrXylSqKElsL01dAd0sfPHo1DB8q2Gkv9F8F0z4Br/26/MCpo+H825uq2rMaPAVdRD4LvGOM2SQif2ZtttnVLiMIY8xKYCVAV1eX7T6KojQ3rtODbvuKY1UnACNZ2LsTuq7M+dLNcM5in/0F+Oytkaw3rvgJis4FukXkd8DPyLlabgfaRUZLsSYDuyNZoaIosccucLus7S5uG3OHu5hb7H8zJ94376X/gn9j7tgHmb7hbM8mYK2Gp6AbY240xkw2xkwDLgGeMsZcDjwNfD6/2xXAo5GtUlGUWFPaXXFZ210sTD7hP80uH/SMYhxeM1FNL5cbyAVIXyXnU3dIElUUpZ4EaWsbFYUpgxckNrCw7Qn/QycSqdGgZy0mHcWZQIVFxphfAb/Kf78TOCP8JSmKEhaN1C6gJ/ksPWNvgTE+XCwWVpZLPujZ6MVV9UYrRRWliWmYdgFb+nIl+lmfwptKl/Uq7x/IkBAZHSxdSEsUV/lABV1RYoqfQh273iVQI4t27eIjWSlBGD+lrOGW9aRhJ+ZxKq6KGhV0RYkZ/QOZskETdq6U/oEMgn0+ceQWrVvvFTe6rrRNRbR70gBIijRd+X416IALRYkRlqVaOjUIyoODK9bvsC8OAQ4cOhxdcHRLX3Axl4SjmIPzE8WIMSrmBaiFrrQsjTAsIihOlqpFofC5uVX2HciGHxwtLdv3wsZP7kQrtL4NA7XQlZYkrvnMXr7vQoFrH5dy3XcoO8x1fZtHr7mq9EYr6OlLzCXnJw8woLk0jx3Ud26HWuhKS9Iw2R8BcbJUoVzgbOKHZQwbw40Pb2Xj63t5aFOm8vTGJ2/xl8Hi4lZxI86NyWqJCrrSksQ1n9muhS5AOpUoCw46DW4uZSg7zH3P72LElG/3fYPz0Y+8UjG3iGtjslqiLhelJWnkYRFuro+ezg4umt1h0x2vfEuQaykVcwvbG9yWPrjtZOhtz33d0ufaj/yAGUNv2zX0d1znez1KZaigKy1Jo/pk/fj2n96+pyx7ZSg7zDWrXyq6AdhdY1CKbgpb+uBbx8HDX8o31DJHZnp+7NxckLMAY2CvOYal2f/O3e+eEYsYRdxRQVdakkYdR+anV4mTD936nSWc1jW2p92Do04U3eDWLs4J+aH3ynfMDsFvHs8FOcdPAYR/ZxJfzV7F6QdXsmbkE7bXoYSP+tCVlqURfbJ+fPtJh/J3i0Lfd09nB8se2+b7/BPGpRg8kOW49jSrPrqaEx+9BB71EV3d/2YuYyWftfInS9fZ5sA3eowi7qiFrigNhB/fvpuYWxQKp10RkhPjxrTx2vLzePbY2znx9Z/hMLemnBIfeiPHKJoZFXRFaSD8+PY7fIhipcLZ9Ydfwnem2497c0TKZno2aoyi2VFBV5QGwo9v3yvYWSqcfn3ooxOE/FZ6WnT9dVmBUKPGKJod9aErSoNRWkRjBRKt7dbXf3h4CweyI0WvFeCi2cWxgd7umVyz+iXXc65KfZNPJrbZDgt2xGNAcyPGKJodFXRFaTD8DqUYKhFzyHm8n96+h/6BDL1rtjHoUlzUndhAb2oVE3gXwNcEIWNgv3yA9gtv9V22r9QOFXRFiYhKm3/5aUvg1kkxMzjEkgc2k3WqFuLITE+/Y+CMgYO0cX12EY+NfILXTj3P3wuVmqKCrigREHT0W6H4O8mw306KAq5iPupe8WmR7+MYerMLR/PJ/QRllfqgQVFFiYAgw4xLq0OdKOye6JbF4nSMZW13sXPsZYHEfNXwOUXFQQKaqdLAqKArSgQEaf7l1ePc4t33D7uW9QswLmX/J/3smKtYmHyChPj0lQMbzMncfPivi7ZfPmeqBjobGBV0RYmA8Q6pgnaWtd/qyeyIKcp4KU0LvG3BrLJA6bK2u3ht7GUcJ4O+hXwYYdXhc/irQ/9Q9LtUUug6fqKvtSr1QX3oihIy/QMZ3jt0uGx7KiG27gq3HuelFO5nlxa4Yv2O0X2C+MohJ+b3jXyarx36ou3vs8Om4fvFtzpqoStKyKxYv4PscLkn27KwSzsOLpk3w3f+t4Brx8Il82bw+TH/l+1jr/DvKwcOk+La7NWOYm6hvVgaG7XQFSVk3ETPKdslnUqUFQnZYaDISi7MjrnimH/la2YlFyQOBCgQEnYev4DP7vwcQ8PefnztxdLYeFroInKUiPyriGwWkW0isiy/fbqIPC8ivxGR1SIyJvrlKkrj4yV6hdkuVoaLHzG3sG4YhdkxvW13cXP2dlLD/sTcABxzLPQOsvDtBb6CstqLpfHx43I5CJxljDkNmAX8uYjMAb4D3GaM+RiwD7gyumUqSnzwM1jC8nP3rtnmS0wLsW4YK9bvYKn5J3aOvSxYkRAgxxwLf78d8M5pB+3FEhc8XS7GGAP52mBI5f8Z4Czgsvz2e4Be4EfhL1FRoqHSSk4vejo72Pj6Xu5//g3HVrcCfL1/q2tpvhPTPpTmoWUL2DDyC0j6S0OEvJADUjLb0ykomxThe/NPUxGPEb6CoiKSFJGXgHeAXwK/BQaNMVYo/01AP3UlNvgZ9VbNsVe/4CzmkBPX+59/o6Ljf/eNS7hw5BeIz5xyyBUJPTM8E3r3lw1qdmp1q2IeP3wFRY0xw8AsEWkHHgH+yG43u9eKyCJgEcDUqVMrXKaihIuffilBKLT2RZyHLhfiZ1BFKc+Oucp3TjnkhNwA/zx8DiuPuZpnbfYp7e4Y5tOKUlsCZbkYYwZF5FfAHKBdRNryVvpkYLfDa1YCKwG6urqC/w9WlAgIUsnpRWnfFr867TRKbsK4FOPGtBW5QboTG/hW6k6O5qDvsv13zVi+dvhK1ox8gnQqybddApra6rY58BR0EZkEZPNingbOIRcQfRr4PPAz4Arg0SgXqihh4uQ3DpKWZ1nlfouCSnGy0M879Vi6jp/Ikgc3c2fiG3wykZsJGsi9MjKTK7Jfw5ALaKrF3Rr48aEfCzwtIluAF4BfGmPWAjcAi0XkVeBDwJ3RLVNRwqXaEWmFPviweXr7Hno6O9icOlIcFFTMF+bF3LomFfPWwE+Wyxag02b7TuCMKBaltA5RZZp4UanfuFqr3A9ffveHmN7PkTbBhHzYwOLDV412RoTq4gJK/NBKUaVuBO0ZHjZB/cal63UjlRSOHtMWKC3R6r2C5PO/A6Qjrho+p6wzooWW67cOsRL0ellzSjSEnWkSNX7b3Jb6rKctXef5mqDZKwBIAmZ/kUc7rmP5w1sB+7VpuX7rEBtBr7c1p4RPmJkmlRLESPBaVzqVHK2m7B/IMHf5U56vsYQcgrlXdk67hBO/+I8A9OS3L3tsG/sOFD8RaLl+axEbQY+bNad4E0amSTU4GQkbX9/L09v3lIm8W5vbQqvcj2umO7GB21N35Co3A1jlIyafU/72gqKccst9pE+xrY2YCoobKqWrq8ts3LixotdOX7rOtnJJgNeW68DaOGInfIVWbtTMXf6UrUALxVVy1poAX+t1Oq5F0D7lkC8QMnBNSdCzPZ2it3uminaTIyKbjDFdXvvFph+6k9Wm/sH40tPZwUWzO0jmlS0pwkWza1fg4uQOKTUcCp8ES6cEFYq55WZxEvPuxAZeDTDTE44I+TMjMznh0H1FYg4wOJRlyQObQ2lZoMSf2LhclsybYWsdqX8wvvQPZHhoU2a0wGbYGB7alKHr+Ik1EfUgk4Is8XfKjPFys7w45komyFBgq3y76eAzh1a47mcNzlArXYmNhe5lHSnxwy0uUgucBi3b4fUk6JQBY830DCLmxsDhEfhq9qpRMU96vFhTExWIkYUO2m+i2ah3lktpm9ukCHNOmMCLu/YHfhK0W3MYVnlShN9++y8Ad9+8uh4ViJmgK81FPbJcCrNA2selePf9w0Uun2d/u7dof7ugY/9ApihFsD2dYnw6NVpEtKztLhYmnwCCpSIeJMn12S8X+ckv/fiU0e+XzJvBkgc3l80rtYZPa4aLEpssF6X5qHWWS5BKT4tkQvjA2Db2D2U5rj3NmSdNYvULb9gOgQZ4ecwVHC3ZYCX7wOLsVWUBz7knTuTirqlFIn3mSZNYt+WtoptJb/dMwF8GjhJP/Ga5qKArdSUsq7LU8jaGURG2jumVTlgNlnsFAlrlkmDmwXttOy+2p1McPDziS6Sdrq2jPc2zS88KcCVKI+JX0NXlotSVMOIipZZ3YbVkZnCIJQ9s5oGNuyIR80rdKwC7TTtzD96B2M+Gse0D41RMV+94hNIYqKArscerx0p2pNw3HgY7x1wWqLUt2KciJhwGXTixe3Co7Mmm0IdfiAZLWwsVdCV0ahWcq0UrWztGuyISzCo3wDU2vnI7MU+nkhyVSpT1ZgEYn06VtSywQ+s0Wg8VdCVUatVErZIAZxgEtcqL3CuH7vD1GgEumt1B1/ETbQOdIjhet9W2QKcUtSYtJ+ia2hUtfpuoOX0Ofj8fv61sw+LnY5ZwkuTK64OI+XsmxcmH7gl0LkNuatE3enL9Y0rfj2tXv+T6Wg2Eti4tJejagjd6/ATnvt6/lXuf2zUaCizscvjQpoyvz6dWwb5KhByKR8FVglurAS83kwZCW5eWEnRtwRs9XsVC/QOZIjG3GMoOj1Zslm63WgEUWqptCciORHIJowTNKQd3X3kQ3IKZdn2N/L5WaW5i08slDDS1K3q8hi+vWL/DIUnPPjgIRyz1zOAQJv9z1GL+4pgrAxcIGZMbBXfCwfKuiEHwCmZafY0mjEsFfq3S3LSUhV7vgQr1phbxA6/hy243z6RD+l5SpGb+8u1j/pKxkrtbBBXzEw7dF8oajkoluHb1S6xYv8M1tjBw07kaE2pA6vmZtFSlaL0HKtSTRrl2t6ESl8+ZWuRDryWVBj3BfUBzUOyGa1w0u6PsfWmV/7dxI6q/s6YbcBEGrdyCt96tai2cWtZePmcq3+g5xdGVEBXdiQ3sHHsZJ0kmcDriMyMzmX7wvsjEHI7EFhrhs1O8qfffWUu5XKB1W/A2SvzAyyXT09nBivU7bAtqwsYa0Bw06AneVnm7Q+WmheVesr52uAzbcIotaOyn8aj331nLCXqrEnX8IIjf0O6mWvj6qJ2A1bhX/KQiCtDbPZPeNdscRb2wZa8VyHRKR3SKLbRK7CdO1DtO11Iul1bGK/ukGiy/YWEWyo0Pb/U957L09VHy6pjK3CsHTYLpB+/zlVd++Zyp9HR20Ns9k1TC+yTWI7nTZ3Tpx6dE9tkp4RLl35kfPC10EZkCrAL+CzACrDTGfF9EJgKrgWnA74D5xph90S1VqQYvV0c1OPkNlz22rWGqPquxyv2W7QvwpydO5Onte5i+dB3HtadZcMYUnt6+Z/Q9cHKr7B4ccv2Muo6fqNksMSDKvzM/eGa5iMixwLHGmBdF5APAJqAH+AKw1xizXESWAhOMMTe4HaveWS5KNExbus7Xfk7R/ulL10VqmVupiEF95cMG/qtDKqLl8y70gZ950iTPbBTtW65UQmj90I0xbwFv5b//TxF5BegALgD+LL/bPcCvAFdBV5qP/oGMbXaGHU5VuW6WazVYQU8I11c+LpUoE9/+gQzX9W12rHS1rtmuylPdJ0pYBAqKisg0oBN4HvhoXuwxxrwlIh8JfXVKw+NW+WlHabS/fyDDewcPh7soKu9V7qdA6P3sCP0DmVGRtmIAfrJR6v1IrjQ3vgVdRI4BHgKuMcb8QXz+pYjIImARwNSpUytZo9LABE3HKoz2R9ECt9JRcFA+eMKJEaB3zbZREe5ds831GkozHFo1dVaJHl+CLiIpcmJ+rzHm4fzmt0Xk2Lx1fizwjt1rjTErgZWQ86GHsGalgQjiLil1LYQZDK1mFNw+k+b0Q3cGOp+Vjtg/kHHNN1d3ilJL/GS5CHAn8Iox5taCX60BrgCW578+GskKlYbGq/Ofhd3AhbCKLawMlqDulSBDJ+zwGjqdFGmZSmSlMfBjoc8F/grYKiJWZ/1/ICfkfSJyJbALuDiaJSqNTKFP2Enc7IKIgOMcTL9Y7W0hnFFwQfF6Mrn041NUzJWa4ifLZQO5FFs7zg53OUopceimZ/mE+wcyLO57iZECx1pC4FsXnmr7uiAWdSlRBD0TQtHaq+WhTRm6jp/YcJ+X0rxo6X8D0wgTloKW9IP/DI5K+rVU4yv3CnqGKeYQ7+EpcTAklHJU0BuYek9YquSG4jeD4+v9WwOtpTuxgVtTd5AkuFXuViAUNXFsoNUIhoRSGdrLpYGpd+e2qFqB9g9k+Jfndvnef1nbXXw/dQdtAfuvGJOzyusl5lCestg/kGHu8qeYvnQdc5c/5bvfTS2pdwtYpXLUQm9g6t25LaobShBhWJX6Jp9MbAtslb9nUpx86J4KVlfOhHGpitxDpSmLcbF8621IKJWjFnoDU+/ObU43jmpvKH6E4cUxV/La2MsCiXnhXE83MQ8Si+1oT3Pz+TPLPgc/WFatZYU7Wb7XrH6poaz1qD53JXrUQm9g6lkm3j+Q4cCh8pL8MG4obsVIUQY9R/f3d9jRay2sCA2aZllohbvdyBrJWtd+M/GlpWaKKv6yF5xK8tvTKXq7Z1YtOP0DGZY8uJnscPH/vUrdK5VUetoxLpVgwtFjR9+bM0+aVNT61hK0a1a/5HGkcjry1q1X7nqjdF3ULJfGIrRui0rz4NeH61SSf/TYtsB/1G7CsOyxbew7kB0VcgheIPTPFQ5oTqeSRdcowIWzJ/ONnlNG1233Xn37wlM8x8vZsXtwiNsWzPKsqm0UP7X2m4kn6kNvIZx8uNf1bS7y34YVFHObZNTT2cGNk7eys8BPHkTM3zMpTsgPaB6XSgTyi7enU1w0u6PoNYZcIZCXv3vF+h30ds8McLYcx7Wni4aUu+2nKJWigt5COAnysDFFI+PCCorZdSG0RHH/itO5+PVbSFSQivjMyMzRoGc6lWRMW9K3XzyVEHq7Z/L09j1lrylMzXN6rzKDQ4HT95z8z6WXXU8/dRzSKRVvVNBbCDdBLhSzMLJr3LoQ/uTA3/HB934b2Fe+3XQUzfXsaE/z7QtPYX8A98fRY3NeRidftrXd7b0KMozDWqPVGsF6YoHy4OzYtvr8OVY7E1ZpHFTQWwDL+soMDrm6JiyrtNA1IBSLkt9z2QUOuxMb2D52ISclMr5dJMbkSvJXDZ/jmMES5MlhcCjrGdTsH8iwZN4MXwOe3RDg2aVnFWUrufnPB4eydRFSLSRqHjQo2uSUBvfcXBPt41Kj31cSFHMbWJEr3f8RbeLPOWIMHCTF9dkvOXZFtCzJi2Z3lM3y9DsWzw4r+HnMUW0VFRRZlN5o/MQg6tH/RQuJmge10JucIEMkqs1gtTtXd2IDG8Z8JV+671/MnxmZyUkH7/FscTuUHebp7XvKnigunzO1omIg65gr1u9gsAoxBzhw6HCRte33SWL34FBNfdpaSNQ8qIUekLjl5wbx9wbxRdtRatEFHTxRaa/y3YNDZU8Us5Y9XtU0pMzgEB1VDq/edyBblBZ65kmTfPWwaR+XqmmLAC0kah5U0AMQl14cFv0DmUCuh2otsuPa0yx694f8VfKJUR95EDF/ZmTmaMDTQsgNwhBxbrebEClKN6xGhAs586RJZa6coBT6ou9//g1fr7G7zihdMTq4unnQStEAOI0ca5TqvlLcRqSlEkK2oAF4OpUMFPi0++P/fz/4AnN+/0jg7BU3X3nh6Do3H30qISCUVZ9Wg3VuqwCqGkoLmSpBgNeWn1fVMZR44rdSVH3oAYhb8MhtXSsuPq3iLJbSFLcNj9zBwW8ez5y9/sTcyicfNsKq4XNcfeWZwSGuXf0SX+/fOpp9k7Q5SXbEhCrmcMSVM3DTudy+YBYTCoLGQUiKhDIMW33aihfqcglAvdvZBsVpvR35qsVKHqlLA5/diQ0slx/Tlh10CZdAAAAPF0lEQVTxfYxlqWu4+90zfO9vgHuf2zU6zu3aCnqpVIIh95RjPSGsWL8jsKUehmVuHUd92ooXaqEHoN7tbIMSxXoLrf4jgyf8ibkBXmUKd797RqBSfeu1li+6khuoEKxtrkVhkU3QJzHrycep1D8p4svqT4r4foJSWhsV9AD0dHZw0eyO0Uf+pAgXzW7cJkbVFAg5cVx7mmVtd7Fz7GUsTD7hP+gJ7BiZzDnvf2f056ACawmq3Y3Kz/nHjakujTHIjcSKq/R0djjeWL83/zTPXuvWfo36f0xpLFTQA9A/kOGhTRmG84HkYWOKGjq1Aqs+upqFySd892CxvNrL2q7hzw991/Z3frEE1c2X7sZ7h4ZJJmT0RpIUYe6JE0ctaLfj7R4c8n0jSSWk6CnI7cZa+rsJ41K0p1Oh3YCV1kJ96AGo99DmoESRZnnirgd8mdYmb4L/4egTGb/kRe5Zus73OZIJYXikWO5LXUXW+kuzXhKSaxXgxPCIKctKcsuesbC6JYKPfug2749bzEJb1SphoRZ6AOKW5RJKj44tfXDbydDbnvtqvAN8Vu+V6e/fx5w/fIv+gYxvd0VHe5rvXXwaty+Y5ekqsrN8b50/a/S1TpR+Xl7VtIU3k57ODk+/d3bYaB8UpS6ohR6AuGW5VH0D2tIHj30Fsvn997sXxhgD75qxfO3wlaNpiNYNZMm8GVy7+iVXN4vVzMrCzWotzYW/bcGsov17Ojsc8/BLPy+3QqTCPHiLm8+faTtxqfSYc5c/pYU6Sk1RQQ9AvUqkK203UNUNaEsfPPI3vixyr+lBVj63l6vCz7r6BzJlsz2dXEl+Py8nN01CsC0YK6ysdLoZCEduFFFUFMetBYVSGzxdLiJyl4i8IyIvF2ybKCK/FJHf5L9OiHaZjUEUWSNeVNqruqohz5Zl7iLmI5LAGDhsEqwaPmd0epAdllC7uUH8rMt6L+z6rNu5kvx+Xk4+dzdffE9nB88uPYvbF8wqC5TatVsIsx2t9i9XnPBjod8N/C9gVcG2pcCTxpjlIrI0//MN4S+v8ah1AKuSQGzFQ5639MGTt3i6Vhg/hU8e/IGtdVoqZoVCbWcxQy6z4+bzvYdPe/m67VxJ1X5e1rg8J+z6oDhZ7WHFWuIWnFdqh6egG2P+j4hMK9l8AfBn+e/vAX5Fiwh6ranED+53yHPhY/sVx/wrXzc/pm34ffcFpdJw9k3svs/+/IacJWznCqi2CZSXIFYay3Ab+lyJSDodL6xYS9yC80rtqNSH/lFjzFsAxpi3ROQjIa5JKaASP7ifP/gX1vwjn9p0CxfwLoyFkayQ9OpXLkk4/wdw6nyO+9+VNSqrxmJ2s36BimMZvd0zHf37pe9lqe+6tCNjZnCIVFJsm5+FFWuJW3BeqR2Rpy2KyCIR2SgiG/fs2RP16ZqOSsr3PQcWrF1M14vXM1HeRfIFQp5inkrD534Mp86veF3VsmTeDMcU+PZ0quIbRU9nB+1p+1TEwvfSznd973O7yp6GssOGY45qiyzWErcWFErtqNRCf1tEjs1b58cC7zjtaIxZCayEXPvcCs8Xa6rJSKjETeGa3XFPN7z262Bl9+OnwNk3jYp5peuqlp7ODja+vpd7n9tV5qfv7Z4JBHuvC/dtH5fytKrtXFlO/6EHD2QZuOnciq7TC+1frjjhqx963oe+1hhzcv7nFcDvC4KiE40x13sdJ+790CvBLkAZpPd4Nect+4Pf8rfw2q/9HySVHnWxRLquAPnmlsDaHePr/Vttxd7uvbb7XFJJ4egxbewfytqubfrSdb7bFVTbI1/TEpVC/PZD9xR0EbmfXAD0w8DbwM1AP9AHTAV2ARcbY/Z6nawVBb0hhmJs6YOf3wBDnh8Rh0mQMIZ35MO8cfoS/rj7y56v8Ss+QW9ufve3y00vxO69ruRzcXqNXWZPNTfsehkBSuMS2oALY8ylxphjjTEpY8xkY8ydxpjfG2PONsZ8LP/VWylalLpnJNzTDQ9/yZeYGwOLD/0NJxy8lznvf5+FLxzvK9/db0500FYEfvZ3y023sHuvK/lcnHzXl8+ZGqq/PJSWDUpLopWiEVO3jIQtfbD2Gjj0nq/dDbn+K4WTg/zkNgfJiQ4qon62e+Wmg/17XcnnUivfdd2NACW2qKBHTF3aBZT2YHHBAMOkuO7Ql3jUZgycl4gEEZ+gIupnf6/1CfbpjJV+LlEWllmuKycnqKYlKl6ooEeMX6su1CDYk7f4E3MDz4zM5MvcxFFHJcBmvJqdiBSuNSEy2h++kIQI05euK7qWoCLqZ3+33HQBLp8z1fZ9DGptBwnOVoJXC19NS1T84CvLJSxaMSjqh9CDYL3tuI2PMAb2cQy92YWjLpb2dIqDh0d8BSC9eoeXUnicMLJc/KzHbzsBP9hmxCQEhKKOi9V8Zk4BV7Dv+Ki0FqFluYSJCro9oWfC3HayYz8WyypfmP1a0XYBblswy1NsndaaFGHEGEeLPcqsnqhT/NzEtpRKr9MpJVKA15afF/h4SnPhV9DV5dIAhB4EO/smBx+68HBiHtcdXFj2Emsij5cQOq1pxBheW34e0x0mE4Ud0KtlnnaQtVd6nVrOr4SBTixqADxL9YNy6vxcQdD4KYDkvl74T9A7SLL71qrKxr3WGvq12FDr9rFB1l7pdWo5vxIGKugNQCR/zKfOh2tfht7B3Nd8tWe1Pd291loLYfKbnz53+VNMX7qOucufqkrs7a4plRBSyeIGCtVcZz167SvNh7pcGgDPjIvRPuVvwvjJZX1VKjlfNY2s3NZai1xtLxdV2MOxna7Jbls116nDopVq0aBoo7N2MWy8i6KslQh6rERBJX5uP6/xCiI3RLsFRQmR0Er/lTqypa9czCEX7HzylrosyS+V+Ln9vsbLraOVlkqrooLeyDx5C4755PvfrOlSglJJPxK/r/HyN9ciMKsojYj60BsZN9EeP7l266iASqzkIK9x8zfXpd2CojQAKuiNgl3gc/xkhwIhyf2+gakkrzqsXGwdAKG0KirojUBpM639b+R+Pu0y2HxfSYGQQNdfN3xAtBIrOUzLWjNGlFZEfeiNgF0zrewQ/OZxmwKhlfDZW+uyzCBUkletudiKUh2attgIODbTklxhkKIoLY2mLcYJpwBngwc+FUVpLFTQa8GWvlwHxN723NctfcW/P/umXLFQIal0wwc+FUVpLDQoGjVOAU84Eti0voZY3q8oSuuhgh41TgHPJ28pFuxT56uAK4pSFepyiRqn4qAGr/RUFCV+qKBHjQY8FUWpESroUaMBT0VRaoQKetTYTQ+KQetbRVHihwZFa4EGPBVFqQFVWegi8uciskNEXhWRpWEtSlEURQlOxRa6iCSBHwKfBt4EXhCRNcaYfwtrcQ3J2sWw6W4wwyBJmP2FWPRWURSl+anGQj8DeNUYs9MYcwj4GXBBOMtqUNYuho135sQccl833pnbriiKUmeqEfQOoLBZ95v5bc3LpruDbVcURakh1Qi62GwraxkoIotEZKOIbNyzZ08Vp2sAzHCw7YqiKDWkGkF/E5hS8PNkYHfpTsaYlcaYLmNM16RJk6o4XQMgyWDbFUVRakg1gv4C8DERmS4iY4BLgDXhLKtBmf2FYNsVRVFqSMVZLsaYwyLyd8B6IAncZYzZFtrKGhErm0WzXBRFaUB0YpGiKEqDoxOLFEVRWgwVdEVRlCah9QTdaxycoihKTGmt5lx+xsEpiqLElNay0N3GwSmKosSc1hJ0HQenKEoT01qCruPgFEVpYlpL0HUcnKIoTUxrCbqOg1MUpYlprSwX0HFwiqI0La1loSuKojQxKuiKoihNggq6oihKkxAvQdeyfUVRFEfiExTVsn1FURRX4mOha9m+oiiKK/ERdC3bVxRFcSU+gq5l+4qiKK7ER9C1bF9RFMWV+Ai6lu0riqK4Ep8sF9CyfUVRFBfiY6EriqIorqigK4qiNAkq6IqiKE2CCrqiKEqToIKuKIrSJKigK4qiNAkq6IqiKE2CGGNqdzKRPcDrNTthdXwY+I96LyJi9Bqbh1a4zla+xuONMZO8XlxTQY8TIrLRGNNV73VEiV5j89AK16nX6I26XBRFUZoEFXRFUZQmQQXdmZX1XkAN0GtsHlrhOvUaPVAfuqIoSpOgFrqiKEqToIJug4gkRWRARNbWey1RISK/E5GtIvKSiGys93qiQETaReRBEdkuIq+IyJ/Ue01hIiIz8p+f9e8PInJNvdcVNiJyrYhsE5GXReR+ETmq3msKGxH5av76tlXzGcarH3rt+CrwCvDBei8kYs40xjRzXu/3gV8YYz4vImOAcfVeUJgYY3YAsyBnhAAZ4JG6LipkRKQD+Arw34wxQyLSB1wC3F3XhYWIiJwMfAk4AzgE/EJE1hljfhP0WGqhlyAik4HzgJ/Uey1K5YjIB4FPAXcCGGMOGWMG67uqSDkb+K0xJi6Fe0FoA9Ii0kbupry7zusJmz8CnjPGHDDGHAZ+DXyukgOpoJdzO3A9MFLvhUSMAR4XkU0isqjei4mAE4A9wE/z7rOfiMjR9V5UhFwC3F/vRYSNMSYD/E9gF/AWsN8Y83h9VxU6LwOfEpEPicg44C+AKZUcSAW9ABH5LPCOMWZTvddSA+YaY04HPgNcLSKfqveCQqYNOB34kTGmE3gPWFrfJUVD3p3UDTxQ77WEjYhMAC4ApgPHAUeLyF/Wd1XhYox5BfgO8EvgF8Bm4HAlx1JBL2Yu0C0ivwN+BpwlIv9S3yVFgzFmd/7rO+T8rmfUd0Wh8ybwpjHm+fzPD5IT+GbkM8CLxpi3672QCDgHeM0Ys8cYkwUeBv60zmsKHWPMncaY040xnwL2AoH956CCXoQx5kZjzGRjzDRyj7BPGWOayhoAEJGjReQD1vfAueQe+5oGY8y/A2+IyIz8prOBf6vjkqLkUprQ3ZJnFzBHRMaJiJD7HF+p85pCR0Q+kv86FbiQCj9PzXJpTT4KPJL7+6ANuM8Y84v6LikS/gdwb94lsRP4Yp3XEzp5n+ungS/Xey1RYIx5XkQeBF4k54YYoDkrRh8SkQ8BWeBqY8y+Sg6ilaKKoihNgrpcFEVRmgQVdEVRlCZBBV1RFKVJUEFXFEVpElTQFUVRmgQVdEVRlCZBBV1RFKVJUEFXFEVpEv4/uxsxDkpoFAAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "price_use_best_parameters = [price(r, best_k, best_b) for r in X_rm]\n",
    "plt.scatter(X_rm,y)\n",
    "plt.scatter(X_rm,price_use_current_parameters)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
